Javascript Promise 如何与 setTimeOut 配合使用

Ric*_*chS 2 javascript settimeout promise es6-promise

如果这是一个基本问题,我很抱歉。我真的很困惑 Promise 在 Javascript 中是如何工作的。

我有以下代码:

function wait(ms) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("Done waiting");
            resolve(ms);
        }, ms);
    });
}

let a = true;

let p = new Promise(async (resolve, reject) => {
    await wait(3000);
    console.log("Inside Promise");
    if (a) {
        resolve("Success");
    } else {
        reject("Failure");
    }
});

const func = async () => {
    let output = await p;
    console.log(output);
};

func().then(console.log("abc"));
Run Code Online (Sandbox Code Playgroud)

这是打印输出:

abc
Done waiting
Inside Promise
Success
Run Code Online (Sandbox Code Playgroud)

我一生都无法弄清楚为什么abc首先打印出来。难道不应该等待 func() 执行完成吗?我预计abc最后打印。谁能引导我完成执行步骤?提前致谢。我真的很感激。

Ter*_*rry 5

您提供的Promise.then不是回调,而是在运行时立即评估。您需要将 移动函数console.log体内:

func().then(() => console.log("abc"));
Run Code Online (Sandbox Code Playgroud)

请参阅下面的工作示例:

func().then(() => console.log("abc"));
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,可能有十几个这样的重复。初学者很常见的错误。 (2认同)