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

时间:2018-11-23 05:57:20

标签: asynchronous loopbackjs

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

3 个答案:

答案 0 :(得分:1)

  

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

参考链接:async

答案 1 :(得分:0)

Loopback 3支持Promise回调。只要兑现承诺

例如:

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

答案 2 :(得分:-1)

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

希望对您有帮助...