मेरे पास एक ऐसा फ़ंक्शन है जो वादा करता है, और मैं इसे एसिंक फ़ंक्शन के भीतर से प्रतीक्षा करने का प्रयास कर रहा हूं। समस्या यह है कि कार्यक्रम वादे का इंतजार करने के बजाय तुरंत पूरा हो जाता है।एसिंक फ़ंक्शन पूरा होने से पहले नोड निकलता है
async-test.js:
function doItSlow() {
const deferred = new Promise();
setTimeout(() => {
console.log("resolving");
deferred.resolve();
}, 1000);
return deferred;
}
async function waitForIt(done) {
console.log("awaiting");
await doItSlow();
console.log("awaited");
done();
}
waitForIt(() => {
console.log("completed test");
});
console.log("passed by the test");
बिल्ड और चलाएँ:
babel --stage 0 --optional runtime async-test.js > at.js && node at.js`
परिणाम:
:awaiting
passed by the test
एक सेकंड इंतजार कर के बजाय तुरंत समाधान किया जा रहा कोई प्रभाव नहीं है
function doItSlow() {
const deferred = new Promise();
console.log("resolving");
deferred.resolve();
return deferred;
}
दिलचस्प बात यह है "के समाधान" छपा है कभी नहीं, भले ही यह अब तुल्यकालिक है:
awaiting
passed by the test
मैं एक संकलक समस्या पर शक है, लेकिन मैं कोलाहल के उत्पादन और यह सुनिश्चित करें पर्याप्त जाँच की है, यह तुल्यकालिक संस्करण संकलन किया था।
मैंने सोचा कि मैं सिर्फ एसिंक फ़ंक्शन के भीतर से एक वादे का इंतजार कर सकता हूं। क्या वहां कुछ ऐसा है, जिसकी कमी मुझे यहां खल रही है?