Обратный вызов после завершения двух асинхронных функций

Я хотел бы вызвать функцию [addUp ()] после завершения двух других асинхронных функций (updateDocument1 и 2). Обратный вызов после двух асинхронных функций, похоже, у меня не работает ....

/*Two asynchronous functions are now called, they both update the
the same document*/

updateDocument1();
updateDoucment2();


/* after this has been completed, I would like to call the final function
which adds two keys together of the updated document*/

addUp();

Я очень благодарен за любые советы / ссылки / решения, предоставленные вами. Заранее большое спасибо.

Что это за язык? JavaScript?

Jabari Dash 01.05.2018 20:45

Конечно, сейчас функция addUp () запускается слишком рано и складывает старые значения ...

betzebube1000 01.05.2018 20:45

Ой, извините, Javascript (написан на Node и Mongodb в качестве базы данных)

betzebube1000 01.05.2018 20:46

Должен ли updateDocument2 ждать updateDocument1?

Jabari Dash 01.05.2018 20:47

нет, просто оба должны быть завершены до запуска addUp (). Если бы это был только один случай, я бы сделал update1 (). Then (function () {addUp ()})

betzebube1000 01.05.2018 20:48

Но я не знаю, как использовать Promise для двух функций, которые необходимо выполнить.

betzebube1000 01.05.2018 20:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
267
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вам следует использовать обещания, документы MDN:

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.info(values);
});
// expected output: Array [3, 42, "foo"]

вы также можете использовать async / await, но в любом случае это основано на обещаниях.

async function updateDocument1() { 
  //logic;
}
async function updateDocument2() {
  //logic;
}
await updateDocument1();
await updateDocument2();
addUp();

или же

await Promise.all([updateDocument1(), updateDocument2()]);

тогда вы можете просто сказать, что эти 2 функции являются асинхронными, и ждать их. Я отредактировал ответ

StefanDimi 01.05.2018 20:53

как бы я это написал? Как это? : async updateDocument1 (); асинхронный updateDocument1 (); ждать (updateDoucment1, updateDocument2) {addUp ()}

betzebube1000 01.05.2018 20:57

async определяет, что функция является асинхронной, await просто ожидает ее выполнения, поэтому при определении функции async function nameOfFunction () {// logic}, а затем при вызове просто используйте await nameOfFunction (); // здесь функция выполнена, вам не нужно {} выполнять addup, сказав await, вы будете ждать, пока функция выполнится

StefanDimi 01.05.2018 21:01

к сожалению, в нем говорится, что ожидание допустимо только в асинхронных функциях: await zutat1 (doc, sfaktor, collection2, result.insertedId);

betzebube1000 01.05.2018 21:12

моя функция zutat1 требовалась из другого файла. В этом другом файле я добавил async. Примерно так: module.exports = async fucntion (doc, sfaktor, collection2, result) {logic}

betzebube1000 01.05.2018 21:13

без опечаток конечно. У вас есть идея, почему она не распознается как асинхронная функция?

betzebube1000 01.05.2018 21:14

Что ж, мне либо нужно немного больше информации о коде, чтобы я мог видеть, что происходит, либо вы потратите некоторое время и прочитаете эту статью, это очень поможет, вам все равно понадобятся знания о обещаниях, так почему бы не сделать это сейчас :) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…. если хотите, создайте рабочий плункер и мы его починим.

StefanDimi 01.05.2018 21:38

Большое спасибо. Я придерживался подхода с await Promise.all. Просто у меня всегда была одна проблема. "Await" может быть вызван только ВНУТРИ асинхронной функции. Итак, наконец, мне также пришлось обернуть await Promise.all в асинхронную функцию. Также мне пришлось научиться преобразовывать вызываемую функцию из другого файла в обещания. Но теперь это сработало отлично, и я наконец окунулся в мир async / await. Очень доволен, спасибо !!

betzebube1000 02.05.2018 09:49

Я новичок на форуме. Как я могу дать вам реквизит? Похоже, что голосование не работает, потому что у меня недостаточно репутации!

betzebube1000 02.05.2018 09:51

Я очень рад, что это помогло, мне помогла просто отметка вопроса, на который был дан ответ :)! Наслаждайтесь и получайте удовольствие от программирования, брат!

StefanDimi 02.05.2018 15:20

Другие вопросы по теме