我的Async / Await(ES2017)功能是否按顺序运行?

时间:2017-09-06 14:57:04

标签: javascript async-await

我要理解async / await,但无法在函数内部执行顺序等待对方完成。

基本上我试图让它发射myProm,等一下,然后重新开火。

我没有得到什么?

function myProm() {
    return new Promise((resolve, reject) => {
        resolve(setTimeout(() => {
            console.log('promise in one seconds');
        }, 1000))
    })
}

async function myFunc() {
    try {
        await myProm();
        await myProm();
    }
    catch(error) {
        console.log(error)
    }
}

myFunc()

2 个答案:

答案 0 :(得分:3)

您立即致电resolve 。您应该内部 setTimeout回调:

function myProm() {
    return new Promise((resolve, reject) => {
        console.log('promise in one seconds');
        setTimeout(() => {
            resolve();
        }, 1000);
    })
}

(如果您只想致电解决,则setTimeout可以是setTimeout(resolve, 1000)。)

直播示例:



function myProm() {
    return new Promise((resolve, reject) => {
        console.log('promise in one seconds');
        setTimeout(() => {
            console.log('resolved');
            resolve();
        }, 1000);
    })
}

async function myFunc() {
    try {
        await myProm();
        await myProm();
    }
    catch(error) {
        console.log(error)
    }
}

myFunc();




答案 1 :(得分:1)

您的myProm函数承诺立即致电resolve(),因此实际上并没有等待任何事情。

一旦你希望你的承诺得到解决(在回调中),你只需要调用resolve()