【发布时间】:2025-12-06 10:25:01
【问题描述】:
我希望能够将方法链接在一起,这些方法本身可能包含链接方法。
日志应为“第一、第二、第三”。然而,在实践中,它出现了“第二、第三、第一”。
我知道这段代码有点多余,但我只是想了解 promises/node 是如何执行的。我将如何编写可以链接在一起的基于 Promise 的函数?
user.increaseReadings(id)
.then(function(val) { console.log("second",val); return user.findById(id); })
.then(function(val) { console.log("third",val); res.json(val); });
}
来自/models/user模块:
exports.findById = findById;
function findById(id) {
deferred = Q.defer();
User.findById(id, function(err, doc) {
if (err) return deferred.reject(err);
deferred.resolve(doc);
});
return deferred.promise;
}
exports.increaseReadings = increaseReadings;
function increaseReadings(id) {
deferred = Q.defer();
findById(id).then(function(doc) { <-- here's the problem
doc.readings++;
doc.save(function(err, doc) {
console.log("first");
if (err) return deferred.reject(err);
deferred.resolve(doc);
});
});
return deferred.promise;
}
【问题讨论】:
标签: javascript node.js asynchronous promise q