等待内部函数等待并执行,然后继续执行

时间:2019-06-24 19:03:39

标签: javascript node.js asynchronous callback

我正在执行一个用nodeJS编写的云函数,这里函数会在外部数据输入时触发,在这个函数中,我必须在特定的表上调用并检查DB,但它需要5个以上的时间在执行getDataFromDb函数之前几秒钟,我的主要函数完成了执行。另外,还有一个名为updateItems(postdate);的函数,如果在触发getDataFromDb

时我无法在数据库中找到数据,它将执行

我尝试了异步等待,但是我不确定自己在哪里做错了。在我的数据库操作结束之前,我的功能总是先结束。

  exports.handler = (event, context) => {

   //here i am making data ready for DB and checking for the record if that is present in db
        getDataFromDb(uniqueArray);

        function getDataFromDb(uniqueArray) {
          var params = {
            // params for get reques
          }
          //db get operation

          db.get(params, function (err, data) {
            //takes time here
            if (err) {
              console.log(err); // an error occurred
            }
            else {
             //another DB operation updateItems(postdata);
             //takes time here
              }
              else {
                console.log("first run for db")
                //another DB operation updateItems(postdata);
                //takes time here
              }
            }
          });
        }
      });
      console.log("main function ended")
    };

预期结果应等待内部函数执行然后结束主函数,但实际上,主函数先结束然后DB调用函数结束

1 个答案:

答案 0 :(得分:0)

尽管这可以通过回调实现,但将其转换为Promise链很容易,因为内部函数的执行取决于外部函数,所以最好将链式Promise链在一起,即在第一个函数的回调中返回Promise,以依次执行它们

exports.handler = (event, context) => {
  getDataFromDb(uniqueArray).then(success => {
    console.log('Done')
  })
  .catch(err => {
    console.log('handle get or post err here');
  });

  function getDataFromDb(uniqueArray) {
    var params = {};
    return new Promise((resolve, reject) => {
      db.get(params, (err, data) => {
        if (err) {
          return reject(err); // an error occurred
        } else {
          return resolve(data);
        }
      });
    }).then(success => updateItems(data))
  }
});
相关问题