Как вызвать функцию cb после завершения асинхронной функции в loopback 3 - PullRequest
0 голосов
/ 23 ноября 2018

Я работал над петлевым проектом.
Здесь я делаю расширенный API в модели.
Существует много асинхронных функций.
Я хочу вызывать функцию cb после вызова всех асинхронных функций.
У кого-нибудь есть идея сделать это?

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

Используйте async.parallel, который запускает функцию параллельно и возвращает окончательные результаты.

Ниже приведен пример, который поможет вам:

var async = require('async')


  function functionName(parameter, cb) {
        async.parallel([
          function(callback) {
              setTimeout(function() {
                  callback(null, 'one');
              }, 200);
          },
          function(callback) {
              setTimeout(function() {
                  callback(null, 'two');
              }, 100);
          }
      ],
      // optional callback
      function(err, results) {
          // the results array will equal ['one','two'] even though
          // the second function had a shorter timeout.
          if (error) {
            logger.error("ERROR FIRST SUBSCRIPTION > ", error);
            cb(error);
            return;
        }
        cb(null, {
            success: true
        });
      });
};

ссылка Ссылка: асинхронный

0 голосов
/ 01 декабря 2018

Loopback 3 поддерживает обратные вызовы обещаний.Просто верните обещание

, например:

User.findUserByName = function(name, req, res, cb) {
   return User.find({filter: {where: {name: name}}).then(function(result){
         //make antoher calls
         return result
   })
}
0 голосов
/ 23 ноября 2018

Основы async / await можно найти здесь: MDN async / await

Следовательно, вы должны сделать что-то вроде:

function fct1(a) {
  return new Promise((resolve, reject) => {
    // do something
    setTimeout(() => {
      resolve(a + 1);
    }, 500);
  });
}
function fct2(a) {
  return new Promise((resolve, reject) => {
    // do something else
    setTimeout(() => {
      resolve(a + 1);
    }, 500);
  })
}

async function mainFct(cb) { 
  const a = 0;
  const b = await fct1(a);
  const c = await fct2(b); // won't be executed until fct1 has finished
  cb(c);                   // won't be executed until fct2 has finished
}

mainFct((result) => {
  console.log(result);     // prints 2
});

Я надеюсь, что этопомогает ...

...