Возникли проблемы с выполнением обещаний с помощью setTimeout и параллельным выполнением их - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь написать функцию, которая возвращает асинхронное обещание.Использование setTimeout из 100 мс для имитации разрешения обещания, за исключением G (одно из обещаний), это setTimeout составляет 200 мс.Каждый шаг - это отдельное асинхронное обещание.

Я хочу, чтобы каждое обещание начиналось после выполнения предыдущего шага.Все обещания регистрируют свои имена и параметры дохода в консоли и предоставляют имя в результате следующих обещаний.Основной поток: a -> (b + c + d) -> e -> f -> h -> i -> j `-> g -> /

Здесь: (b + c + d)- означает, что 3 обещания должны выполняться параллельно 'i' ждет обоих g & h.Результаты каждого предыдущего задания должны быть представлены следующему заданию.

var promise = new Promise(function(resolve, reject)) {
    setTimeout(resolve, 100);
});

Promise.all([promise.resolve(a), promise.resolve(b+c+d), promise.resolve(e), promise.resolve(f), promise.resolve(g)...]).then(function(values) {
    console.log(values);
});

1 Ответ

0 голосов
/ 25 июня 2018

Если вы хотите, чтобы одно обещание resolve за другим, объедините их в цепочку, используя .then().Если вы хотите, чтобы некоторые обещания параллельно resolve, используйте Promise.all()

/**
 * promiseGenerator: will generate a new promise which will resolve after <time> ms
 * time: time in milliseconds
 * */
function promiseGenerator(time){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>resolve("resolved after " + time),time)
    });
}

time=100;
a = promiseGenerator(time);

    a.then((value) => {
        console.log('a resolved');
        b = promiseGenerator(time);
        c = promiseGenerator(time);
        d = promiseGenerator(time);
        return Promise.all([b, c, d])//this promise will be resolved after each of b,d,d are resolved, in any order
    })
    .then((value) => {
        console.log('b,c,d resolved');
        e = promiseGenerator(time);
        return e
    })
    .then((value) => {
        console.log('e resolved');
        f = promiseGenerator(time);
        return f
    })
    .then((value) => {
        console.log('f resolved');
        g = promiseGenerator(time*2);
        return g
    })
    .then((value) => {
        console.log('g resolved');
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...