承诺将Alwasy跳到陷阱

时间:2018-09-28 13:22:59

标签: node.js promise

我有一个异步功能(一个Promise),它可以做一些事情。我必须叫它N次。 每个呼叫代表一个模拟点。 我的第一个猜测是使用循环:

for(let i=0; i < N; i++) {
    myAsyncFunc(data[i])
     .then(() => myAsyncFunc(data[i]) )
}

显然,这不起作用,因为循环以及在对myAsyncFun的任何后续调用之前。 我该如何逐步调用异步功能,等待结果并继续进行下一步?

我尝试过这个:

function myAsyncFunc(data) {
    return new Promise( (resolve, reject) => {
     anotherAsync.then(resolve).catch(reject);
    }
}
function simulate(mode) {

    [...Array(10)].reduce((p, _, i) =>
        p.then(_ => new Promise(resolve => {
            myAsyncFunc(data[i]); // <== this return a Promise
        }
        ))
        , Promise.resolve());
}

但是函数myAsyncFunc没有顺序调用。

1 个答案:

答案 0 :(得分:0)

我用async/await解决了,显然,它似乎通过异步函数调用JS的细节解决了杂技

function myAsyncFunc(data) {
     anotherAsync.then( () => return );
}
async function simulate(mode) {
    for(let i=0; i < tempModel[0].linear.length; i++)
    {
        let a = await myAsyncFunc(mode,i);
    } 
}