Я хотел бы вызвать функцию [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();
Я очень благодарен за любые советы / ссылки / решения, предоставленные вами. Заранее большое спасибо.
Конечно, сейчас функция addUp () запускается слишком рано и складывает старые значения ...
Ой, извините, Javascript (написан на Node и Mongodb в качестве базы данных)
Должен ли updateDocument2 ждать updateDocument1?
нет, просто оба должны быть завершены до запуска addUp (). Если бы это был только один случай, я бы сделал update1 (). Then (function () {addUp ()})
Но я не знаю, как использовать Promise для двух функций, которые необходимо выполнить.
Для этого вам следует использовать обещания, документы 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 функции являются асинхронными, и ждать их. Я отредактировал ответ
как бы я это написал? Как это? : async updateDocument1 (); асинхронный updateDocument1 (); ждать (updateDoucment1, updateDocument2) {addUp ()}
async определяет, что функция является асинхронной, await просто ожидает ее выполнения, поэтому при определении функции async function nameOfFunction () {// logic}, а затем при вызове просто используйте await nameOfFunction (); // здесь функция выполнена, вам не нужно {} выполнять addup, сказав await, вы будете ждать, пока функция выполнится
к сожалению, в нем говорится, что ожидание допустимо только в асинхронных функциях: await zutat1 (doc, sfaktor, collection2, result.insertedId);
моя функция zutat1 требовалась из другого файла. В этом другом файле я добавил async. Примерно так: module.exports = async fucntion (doc, sfaktor, collection2, result) {logic}
без опечаток конечно. У вас есть идея, почему она не распознается как асинхронная функция?
Что ж, мне либо нужно немного больше информации о коде, чтобы я мог видеть, что происходит, либо вы потратите некоторое время и прочитаете эту статью, это очень поможет, вам все равно понадобятся знания о обещаниях, так почему бы не сделать это сейчас :) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…. если хотите, создайте рабочий плункер и мы его починим.
Большое спасибо. Я придерживался подхода с await Promise.all. Просто у меня всегда была одна проблема. "Await" может быть вызван только ВНУТРИ асинхронной функции. Итак, наконец, мне также пришлось обернуть await Promise.all в асинхронную функцию. Также мне пришлось научиться преобразовывать вызываемую функцию из другого файла в обещания. Но теперь это сработало отлично, и я наконец окунулся в мир async / await. Очень доволен, спасибо !!
Я новичок на форуме. Как я могу дать вам реквизит? Похоже, что голосование не работает, потому что у меня недостаточно репутации!
Я очень рад, что это помогло, мне помогла просто отметка вопроса, на который был дан ответ :)! Наслаждайтесь и получайте удовольствие от программирования, брат!
Что это за язык? JavaScript?