异步函数在环回3中完成后如何调用cb函数

How to call cb function after async function finished in loopback 3

我在环回项目工作。
在这里,我在模型中扩展 api。
有很多异步函数。
我想在调用所有异步函数后调用 cb 函数。
有人有想法吗?

异步/等待的基础知识可以在这里找到: 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
});

希望对您有所帮助...

Use async.parallel that run function parallel and return final results.

下面的例子对你有帮助:

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
        });
      });
};

参考Link:async

环回 3 支持承诺回调。只是 return 承诺

例如:

User.findUserByName = function(name, req, res, cb) {
   return User.find({filter: {where: {name: name}}).then(function(result){
         //make antoher calls
         return result
   })
}