异步 n 承诺从快捷方式更改

Async n promise change from shortcut

我在一个示例中找到了这段代码,它都在快捷方式中:

async function test1(){
    const p = await new Promise(resolve => setTimeout(resolve, 2000)).then(()=>'test1');
    console.log('Completed test1');
    return p;
}

我想删除 setTimeout 并将其放在非快捷方式中,这样我就可以向其添加多个命令并执行除超时之外的其他操作...

例如:

async function test1(){
    const p = await new Promise(resolve => setTimeout(resolve) => {
    // line here
    // another one etc
}

如何更改上面的代码?

async function test1(){
    const p = await new Promise(resolve => setTimeout(resolve, 2000)).then(()=>'test1');
    console.log('Completed test1');
    return p;
}

我想你还没有完全理解这段代码。 setTimeout 不是捷径。 new Promise(resolve => setTimeout(resolve, 2000)) 用于创建将在 2000 毫秒后解决的承诺。您可以将其视为 API 调用,它将在 2000 毫秒后调用回调

让我们破解这段代码:

// A function test1 which is defined async sow you can use await inside it
async function test1(){
    // You can await for promises.
    //  As explained await new Promise(resolve => setTimeout(resolve, 2000)) 
    // is just a promise resolving after 2000ms
    const p = await new Promise(resolve => setTimeout(resolve, 2000))
     // .then block will run after promise gets resolved
     // p will bcome test1
    .then(()=>'test1');
    console.log('Completed test1');
    return p;
}

如果您想有条件地解决承诺并进行一些计算,您可以在 setTimeout 函数中进行:

await new Promise(resolve => 
    setTimeout(()=>{
        if('Some consition'){
            resolve('some value')
        }
        else{
            resolve('some other value')
        }
    }, 2000)
)