好吧,我是节点js的新手。我想知道我的编码结构。我问这个问题是因为我写了很多回报,而且我看起来很奇怪
setTimeout(() => {
return _db.collection(_encycUsers).findOne(
// search basis.
{"_id" : require("mongodb").ObjectId(_userId)}).then(
// on a successful search.
(_encycUsersData) => {
// if return is not empty.
if(!(_help.isEmpty(_encycUsersData))) {
return _db.collection(_encycUsers).updateOne(
// search basis.
{"_id" : require("mongodb").ObjectId(_encycUsersData["_id"])}, {
"$unset" : {"_otp" : _otp, "_state" : ["request.otp.sent", "request.otp.delete"]},
"$set" : {"_state" : "request.otp.reSent"}
}).then(
// on successful encyc update.
() => {
_debug(_encycUsersData);
// search user after successful otp delete.
return _db.collection(_encycUsers).findOne(
// search basis.
{"_id": require("mongodb").ObjectId(_encycUsersData["_id"])}).then(
// on successful user search.
(_encycUsersFindData) => {
...
答案 0 :(得分:0)
您的退货声明似乎毫无用处。 在
setTimeout(function, timeout)
该函数的返回值基本上被忽略。
在您的代码中,您的函数返回并不重要。有趣的是,你调用的查找和更新方法返回promises,你在这些promise上调用then
方法。
因此,删除return语句并以
之类的代码结束setTimeout(() => {
function1().then((result) => {
function2(something_based_on_result).then((result2 => {...})
})}, 1000)
是一种常见的Javascript实践。 有多种方法可以减少这些链的长度。 如果您使用的是大于7.6的节点,则可以使用异步函数并编写如下内容:
async function foo(){
let result = await function_returning_promise() #calls then on the promise under the covers
let result2 = await function2(data_based_on_result)
}
在几年内,异步模式将非常普遍。今天,连锁系列往往是人们写的。