मैंने कुछ फ़ंक्शंस बनाए जिनमें वादे शामिल हैं और उन्हें जंजीर देने की कोशिश की। सब कुछ उम्मीद के मुताबिक काम करता है
function foo1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("11111")
resolve()
}, 4000);
}).then(() => {
console.log("222222")
})
}
function foo2() {
new Promise(resolve => {
setTimeout(() => {
console.log("3333")
resolve()
}, 3000)
})
}
foo1().then(() => foo2())
// "1111"
// "2222"
// "3333"
अगर मैं वही चीज़ async/प्रतीक्षा करता हूं, तो यह अपेक्षा के अनुरूप भी काम करता है:
async function testAsync() {
let one = await foo1();
let two = await foo2();
}
// "1111"
// "2222"
// "3333"
मुझे पता है कि async फ़ंक्शन एक वादा लौटाते हैं इसलिए मैंने निम्नलिखित की कोशिश की:
testAsync().then(() => {
console.log("FINISHED");
})
लेकिन परिणाम था:
// "1111"
// "2222"
// "FINISHED"
// "3333"
"FINISHED"
को "3333"
से आगे क्यों निष्पादित किया जाएगा?
1
RicardoAlvveroa
19 पद 2020, 09:49
1 उत्तर
सबसे बढ़िया उत्तर
आपका foo2
फ़ंक्शन कोई वादा नहीं लौटाता, बस अपरिभाषित लौटाता है।
इसलिए आपको "3333" से पहले "FINISHED" दिखाई दे रहा है
अगर foo2
नीचे जैसा दिखता है, तो यह आपकी इच्छानुसार काम करेगा।
function foo2() {
return new Promise(resolve => {
setTimeout(() => {
console.log("3333")
resolve()
}, 3000)
})
}
1
roa
19 पद 2020, 10:33
foo2
को एक वादा वापस करने की आवश्यकता क्यों होगी?foo2
के सामनेasync
संलग्न करते हैं,foo2
fulfilled Promise
लौटाएगा जो तुरंत वापस आ जाएगा। तो, परिणाम वही होगा। आपकोpending Promise
लौटना चाहिए।