gpt4 book ai didi

node.js - Async/Await Mongoose 并不总是正确运行

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:16 26 4
gpt4 key购买 nike

我正在使用带有异步/等待功能的 Mongoose 来查询数据库。对 api 的几次调用不会返回必要的数据。下面是 Controller 代码

exports.GetAllUrls = async function(req, res, next){
try {
var urlsArray = [];
await Url.find({uid: req.params.uid}, function (err, urls) {
urls.forEach(function(url){
urlsArray.push(url);
console.log(url);
});
});
console.log("Await called");
return res.status(200).json({reply: urlsArray});
} catch(err) {
console.log(err);
}

有几次在记录 url 数据之前记录了“Await called”。

Node 请求日志:

Await called
GET /api/screens/GetAllUrls/0WyaS0ePeaS54zz9cAgCUnxoE1i1 200 31.348 ms - 12
{ _id: 5b0ad7effa8e80800153fa04,
url: 'https://yahoo.com',
timestamp: 2018-05-27T16:31:10.638Z,
uid: '0WyaS0ePeaS54zz9cAgCUnxoE1i1',
__v: 0 }

从日志中可以看出,该函数似乎在调用 await 函数之前继续执行,但我的理解是暂停执行,直到 await 完成并返回。有人知道为什么会这样吗?

最佳答案

我不知道那个库或方法的细节,但我可以告诉你为什么它不起作用。

只有当语句右侧返回一个“Promise”对象时,“await”才会暂停。在您的代码示例中,该函数似乎需要回调。回调虽然是异步的,但并不是 promise 。也许您可以查看该库的 API 文档,看看它是否可以返回一个 Promise 而不是接受回调?

关于node.js - Async/Await Mongoose 并不总是正确运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50555343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com