Обещание Прыжок Всегда В Улове - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть асинхронная функция (Обещание), которая делает некоторые вещи.Я должен назвать это 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 голосов
/ 28 сентября 2018

Я решил с помощью 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);
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...