使用 forloop 链接 Promise JS

我正在尝试学习如何用 JS 链式承诺。我在这里看到了代码,他们使用 forloop JavaScript ES6 Promise for Loop 来完成它。我发现它很酷,并决定进行一些小的调整来尝试一下。但它没有奏效。如果您能告诉我为什么这不起作用,我将非常感激

这是我的代码:

//Goal: print from 0-10 in order at random times

function test() {

    for (let i = 0, p = Promise.resolve(); i < 10; i++) {

        p = p.then(createPromise(i));

    }

}


function createPromise(i) {

    return new Promise(resolve =>

        setTimeout(function () {

            console.log(i);

            resolve();

        }, Math.random() * 1000)

    )

}


test();

这是我的代码的输出


9

1

7

8

0

6

3

2

5

4


慕雪6442864
浏览 117回答 1
1回答

小怪兽爱吃肉

.then需要回调,而不是 Promise - 目前,您在循环内createPromise(i) 立即调用。创建一个在调用时返回Promise 的函数:p = p.then(() => createPromise(i));function test() {&nbsp; &nbsp; for (let i = 0, p = Promise.resolve(); i < 10; i++) {&nbsp; &nbsp; &nbsp; &nbsp; p = p.then(() => createPromise(i));&nbsp; &nbsp; }}function createPromise(i) {&nbsp; &nbsp; return new Promise(resolve =>&nbsp; &nbsp; &nbsp; &nbsp; setTimeout(function () {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resolve();&nbsp; &nbsp; &nbsp; &nbsp; }, Math.random() * 1000)&nbsp; &nbsp; )}test();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript