异步JavaScript执行顺序?

时间:2020-10-07 00:37:39

标签: javascript asynchronous

异步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解析器模块,以上仅是说明问题的示例。

1 个答案:

答案 0 :(得分:4)

呼叫asyncFunction返回一个Promise。即使Promise立即解决,链接到其上的任何.then都将放入微任务队列,该微任务队列仅在所有其他 synchronous 代码完成后才开始运行。

由于console.log('B');example调用之后同步运行,因此B将在.then回调运行之前被打印。

如果要确保在记录所有数组元素之后记录B,请从asyncFunction返回example承诺,然后在其上调用.then,并记录{{1} } B的回调中:

.then