Nodejs: выполнить затем из Promise.all немедленно - PullRequest
0 голосов
/ 29 сентября 2019

Как вы можете видеть, я создал список асинхронного метода. Внутри асинхронного метода в цикле я помещаю некоторое сообщение клиентом mqtt в брокер:

const example2 = async () => {
    await push();
    await push();
};
const push = async () => {
    for (var i = 0; i < 2000; i++) {
        client.publish(topic, message, pushOptions);
    }
}
var syncList = [];
const startpushing = () => {
    if (client.connected & client2.connected & client3.connected & client4.connected & client5.connected) {
        console.log(`start pushing`);
        syncList.push(
            example2(), example3(), example4(),...);
        Promise.all(syncList)
            .then(() => {
                console.log(topic_finished);
                client5.publish(topic_finished, "true", pushOptions);
            }).catch(err => {
                console.log(err);
            });
    }
}

Я хочу после выполнения всех асинхронных методов, которые я нажимаюНовая тема для брокера, поэтому я использовал Promise.all.

Но я не знаю, почему console.log(topic_finished) выполняется вскоре, когда список моих задач еще не закончен?

Я думаю, это потому, что я ничего не возвращаю измой асинхронный метод?Правильно?Но что мне вернуть?

1 Ответ

0 голосов
/ 29 сентября 2019

Вы должны нажать fns, не вызывая

syncList.push(example2, example2, ...anotherAsyncFns)

и затем добавить параметр

Promise.all(syncList).then((results) => console.log(results));
...