javascript - 异步和 promise 从快捷方式更改

标签 javascript async-await es6-promise

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

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 毫秒后解析的 Promise。您可以将其视为一个 API 调用,它将在 2000ms 后调用回调

让我们破解这段代码:

// 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;
}

如果您想有条件地解决 promise 并进行一些计算,您可以在 setTimeout 函数中执行此操作:

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

关于javascript - 异步和 promise 从快捷方式更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866764/

相关文章:

javascript - 当 return new Promise((resolve, reject) => {}) 忘记调用 resolve 或 reject 时会发生什么?

javascript - 选择 MVC 框架(Javascript - 前端)- Backbone、Angular、Ember

c# - 如何将异步方法作为 Action 或 Func 传递

unit-testing - 如何在 Jest 中测试从构造函数调用然后调用其他异步函数的 init() 函数

c# - 异步和等待 - 单元测试问题

javascript - 返回 Promise.all 不执行提供的 Promise

javascript - 从嵌套的 Promise 返回错误

javascript - 如何使用 Firefox 音频数据 API 弹奏和弦

javascript - 如何从 HTML 文件中分离出工具提示文本

JavaScript - 有没有办法通过指定的键属性合并 2 个对象?