Node.js Q承诺多个参数
Node.js Q Promises Multiple Parameters
试图在我的nodejs express应用程序中使用Q promise库来清理我的回调面条代码,但我在翻译它的某些部分时遇到了麻烦。在向函数传递多个参数和处理作用域时遇到麻烦。
这里是一个简化的"同步"版本来展示我的逻辑:
function updateFacebook(req, res) {
var user = getUserFromDB(userid);
var profile = getUserProfileFromAPI(accessToken);
var success = updateUserDB(user, profile);
res.json({ result: success });
}
我将回调函数转换为返回承诺
function getUserFromDB(userid) {
var deferred = Q.defer();
// somewhere in here there's a deferred.resolve(user object);
queryMongo()...
return deferred.promise;
}
function getUserProfileFromAPI(accessToken) {
var deferred = Q.defer();
// somewhere in here there's a deferred.resolve(profile object);
request()...
return deferred.promise;
}
function updateUserDB(user, profile) {
var deferred = Q.defer();
// somewhere in here there's a deferred.resolve(updated user object);
updateMongo()...
return deferred.promise;
}
function handleResponse(res, user) {
var deferred = Q.defer();
// was thinking about putting the res.json here
// i have no way of passing in the res
// and res is out of scope...
res.json({});
return deferred.promise;
}
现在的问题是连接它们,我试过…
Q.when(getUserFromDB(userid), getUserProfileFromAPI(accessToken))
.spread(updateUserDB)
.done(handleResponse);
Q.all([getUserFromDB(userid), getUserProfileFromAPI(accessToken)])
.spread(updateUserDB)
.done(handleResponse);
超级困惑。任何指导都将不胜感激。
看起来您的handleResponse
期望两个参数,但updateUserDB
只解析一个对象。你可以这样做:
function getResponseHandler(res) {
return function(user) {
// your handleResponse code here
// which now has access to res
}
}
,然后命名为:
Q.all([getUserFromDB(userid), getUserProfileFromAPI(accessToken)])
.spread(updateUserDB)
.done(getResponseHandler(res));
相关文章:
- 简单的ES6承诺问题-交换解决和拒绝参数
- 基于查询参数的可选承诺步骤
- ES6承诺:如何用参数链接函数
- 编写一个使用传递两个参数的回调的承诺
- 如何调试错误:;未捕获(承诺中)缺少参数单元”;
- 函数抽象和承诺函数作为参数
- 带有传递参数的角度承诺链接
- JavaScript循环承诺在参数中使用数组进行迭代
- Firebase 承诺 - Query.once 失败:使用 1 个参数调用.预计至少 2
- 咖啡脚本中的承诺.尝试将多个参数传递给“then”时出现“意外逗号”错误
- 如何将参数传递给承诺函数
- 为什么这些参数没有传递给承诺
- 用一个参数承诺 .then()
- 将承诺与多个参数链接在一起
- Angular中的链接承诺.输入参数错误
- javascript承诺不传递所有参数(使用Q)
- 拒绝AngularJS中带有多个参数(如$http)的承诺
- Node.js Q承诺多个参数
- 承诺响应参数丢失
- JavaScript承诺中错误处理参数和catch的区别