如何在 javascript 中处理异步调用 - 使用 Promise 延迟打印数字

eka*_*nsh 2 javascript asynchronous

我正在尝试创建一个显示数字 1 到 10 并延迟打印每个数字的函数。比如1秒后打印1,2秒后打印2,最多10。还必须在数字打印之前和之后打印开始和结束。

尝试创建一个承诺并使用异步等待来实现这一点。但是无法在函数之后正确打印“结束”。

当尝试解决承诺时,它会在 settimout 操作之前得到解决。

async function disp(){
    console.log("start")
    await promise();
    console.log("end")
}

function promise(){
    return new Promise((resolve, reject) => {
        for(let i=1;i<10;i++){
            setTimeout(() => {
                console.log(i);
            }, i*1000);
        }
        //resolve();
    })
}


disp();
Run Code Online (Sandbox Code Playgroud)

Pra*_*mar 6

Promise 并没有解决,即两者都不是resolvingrejecting所以它会保持在pending状态。i你所要做的就是在达到最终计数后兑现承诺

async function disp() {
    console.log('start');
    await promise();
    console.log('end');
}

function promise() {
    return new Promise((resolve, reject) => {
        const upto = 10;
        for (let i = 1; i <= upto; i++) {
            setTimeout(() => {
                console.log(i);
                if (i === upto) resolve();  // CHANGE
            }, i * 1000);
        }
    });
}

disp();
Run Code Online (Sandbox Code Playgroud)