首页 > 解决方案 > Angular 6 API 中的异步调用

问题描述

我在我的 API 文件中执行了以下代码,但我不明白如何管理以下两个异步调用来执行该函数,以便有人可以帮助我解决问题,或者我可以使用 Promise 来解决问题。

在此先感谢您的帮助。

function getDataFromBK() {
  connection((db) => {

    var comment = "";
    db.collection('comment')
      .find({
        "appNo": appNo
      }, {
        "filename": fileName
      })
      .toArray()
      .then((filelist) => {
        /* response.data = filelist;
         res.json(response);*/

        comment = filelist[0].comment;
        console.log("comment-->" + comment);

        return comment;
      }).catch((err) => {
        console.log("err-->" + err);

        return err;
      })
  });


  filepath = path.join(__dirname, '../../uploads/output/' + req.body.appNo) + '/' + req.body.filename[i];
  fileInfo.push({
    "originalName": req.body.filename[i],
    //"size": req.body.filename.size,
    "b64": new Buffer(fs.readFileSync(filepath)).toString("base64"),
    "comment": comment
  });
}

标签: node.jsmongodb

解决方案


由于comment设置为 inside then,因此您不能指望它在您正在执行fileInfo.pushfind操作中可用,因为操作将async在本质上进行。

尝试像这样重组您的代码:

function getDataFromBK() {
  connection((db) => {

    var comment = "";

    db.collection('comment')
      .find({ "appNo": appNo }, { "filename": fileName })
      .toArray()
      .then(filelist => {

        comment = filelist[0].comment;

        filepath = path.join(__dirname, '../../uploads/output/' + req.body.appNo) + '/' + req.body.filename[i];
        fileInfo.push({
          "originalName": req.body.filename[i],
          "b64": new Buffer(fs.readFileSync(filepath)).toString("base64"),
          "comment": comment
        });



      })
      .catch(err => err)
  });
}

推荐阅读