gpt4 book ai didi

javascript - Bluebird .then() : not working as it should

转载 作者:行者123 更新时间:2023-12-03 07:53:04 25 4
gpt4 key购买 nike

我刚刚开始使用 Promise 和 Bluebird。调试时我可以看到我的函数执行了两次:

首先我收到此错误:TypeError:未捕获错误:无法读取未定义的属性“then”

然后我看到函数再次执行,并且.then()执行成功。我还得到了控制台中打印的正确信息。

为什么会发生这种情况?我实现 promise 的全部原因是因为我想等待执行 then() 操作,因为必须首先检索我的数据。但代码仍然过早跳转到 .then() 操作。

为什么会发生这种情况以及如何预防?

这是我的代码:

exports.findUser = function(userId){

var ObjectID = require('mongodb').ObjectID;
var u_id = new ObjectID(userId);

db.collection('users')
.findOne({'_id': u_id})
.then(function(docs) { //executed twice, first time error, second time success
console.log(docs); //prints correct info once executed
return docs;
})
.catch(function(err) {
console.log(err);
});
};

最佳答案

使用 native npm 模块时,您应该在此处使用回调,如 documentation 中所示。 。因此,对于您的示例,这意味着:

exports.findUser = function(userId){

var ObjectID = require('mongodb').ObjectID;
var u_id = new ObjectID(userId);

db.collection('users')
.findOne({'_id': u_id}, function(err, docs){
console.log(docs); //prints correct info once executed
return docs;
});
};

如果你想使用 promise ,那么你应该考虑使用类似 mongoose 的东西。 .

关于javascript - Bluebird .then() : not working as it should,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34926796/

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