异步JS一直让我感到困惑...
我有以下示例代码:
function asyncFunction() {
return new Promise(function(resolve, reject) {
resolve([1, 2, 3, 4, 5])
})
};
function example() {
asyncFunction().then(
output => {
for (element of output) {
console.log(element + ", A") //This should be displayed first
}
}
)
};
example();
console.log('B'); //But it isn't
哪个会产生以下输出:
B
1, A
2, A
3, A
4, A
5, A
有没有一种方法可以对此编程,以便在As之后打印B?我实际上在这里使用RSS feed解析器模块,以上仅是说明问题的示例。
答案 0 :(得分:4)
呼叫asyncFunction
返回一个Promise。即使Promise立即解决,链接到其上的任何.then
都将放入微任务队列,该微任务队列仅在所有其他 synchronous 代码完成后才开始运行。
由于console.log('B');
在example
调用之后同步运行,因此B
将在.then
回调运行之前被打印。
如果要确保在记录所有数组元素之后记录B,请从asyncFunction
返回example
承诺,然后在其上调用.then
,并记录{{1} } B
的回调中:
.then