作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用带有异步/等待功能的 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/
我是一名优秀的程序员,十分优秀!