最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Nodejs在等待包含承诺要解决的功能之前似乎返回响应

IT培训 admin 11浏览 0评论

Nodejs在等待包含承诺要解决的功能之前似乎返回响应

我正在尝试点击我的API端点“类别”,以从firebase的类别集合中返回文档列表。使用以下代码:

function getCategories() {
  let arr = [];
  categories
    .get()
    .then(snapshot => {
      snapshot.forEach(doc => {
        console.log(doc.data().category);
        arr.push(doc.data().category);
        return arr;
      });
    })
    .catch(err => {
      console.log(err);
      return [1, 2, 3];
    });
}

router.route("/categories").get(async function(req, res, next) {
  let arr = await getCategories();
  res.json(arr);
});

虽然我没有收到任何错误,但我收到一个空响应,该响应在调试时显示为arr未定义。问题是使用调试器时,会调用forEach内的控制台日志,并且我在控制台中看到了我的类别,但是由于某些原因,它不等待Firebase Promise解析,并且路由器只响应未定义的[ C0]变量。

回答如下:

您没有兑现诺言。在arr呼叫之前添加return

Nodejs在等待包含承诺要解决的功能之前似乎返回响应

我正在尝试点击我的API端点“类别”,以从firebase的类别集合中返回文档列表。使用以下代码:

function getCategories() {
  let arr = [];
  categories
    .get()
    .then(snapshot => {
      snapshot.forEach(doc => {
        console.log(doc.data().category);
        arr.push(doc.data().category);
        return arr;
      });
    })
    .catch(err => {
      console.log(err);
      return [1, 2, 3];
    });
}

router.route("/categories").get(async function(req, res, next) {
  let arr = await getCategories();
  res.json(arr);
});

虽然我没有收到任何错误,但我收到一个空响应,该响应在调试时显示为arr未定义。问题是使用调试器时,会调用forEach内的控制台日志,并且我在控制台中看到了我的类别,但是由于某些原因,它不等待Firebase Promise解析,并且路由器只响应未定义的[ C0]变量。

回答如下:

您没有兑现诺言。在arr呼叫之前添加return

发布评论

评论列表 (0)

  1. 暂无评论