【发布时间】:2017-02-03 18:02:19
【问题描述】:
以下是node.js中使用promise的函数。
exports.getDetailsByUserId = function(req,res) {
getUserDetails(req, res) // function to get user details
.then(function (Details) {
var allpromises = Details.map(getStatus); //get and update the status of user
return allpromises
})
.then(function (promises) {
var orderresult =[];
Q.allSettled(promises)
.then(function (allpromises) {
orderresult.push(allpromises);
})
return orderresult;
})
.then(function (result) {
getUserDetails(req, res)//again calling get user details so that i will get modified result
.then(function (data) {
res.json({
"User" : data
})
})
})
.catch(function (error) {
console.log(error);
res.status(200).json({
"Message": error
})
})
}
var getStatus = function (data,req) {
var deferred = Q.defer();
requestify.post('http://example.com', {
"data": [{ "Number": No }]
})
.then(function (response) {
response.getBody();
response.body;
var Status = JSON.parse(response.body);
var Details = { "_id": data._id, "Status": Status.status[0] };
return OrderDetails;
})
.then(function (DetailsData){
var req = { body : { Details :DetailsData} };
updateDetails(req).then(function (data) {
deferred.resolve;
})
})
.catch(function (error) {
deferred.resolve(error);
});
return deferred.promise;
}
getUserDetails 函数第一次获取用户的详细信息,然后getStatus 调用另一个 API 并更新相关的用户状态。至此,一切正常。
我需要再次调用getUserDetails 以获取更新结果,但它没有给出更新结果。也许它在更新状态之前被调用?代码可能有什么问题,以便在Q.all 之后执行?
谢谢。
【问题讨论】:
-
orderresult有什么意义?将数组包装在数组中? -
您不需要拨打
getUserDetails两次。只是更新它们,你不知道它们已经是什么了吗? -
orderresult 是一个 promise 数组。我想让更新的结果显示在网格中
-
不,不是。这很可能是你的问题。
-
在第二次调用
getUserDetails(req, res)之前,您无需等待Q.allSettled(promises)完成。另一个异步 javascript 问题...