function prepareParams(user) {
var deferred = Q.defer();
var params = _.pick(user, 'email', 'password');
_.extend(params, {
grant_type : 'password',
client_id : 'client_id',
client_secret : 'client_secret'
});
return deferred.promise;
deferred.resolve(params);
}
我想在promises链中使用此函数,但它不会返回值。
prepareParams(userParams))
.then(function(params) {
// ERROR!!! params == undefined
}
答案 0 :(得分:1)
可以编写同步Promise,但您必须先确保调用deferred.resolve(params)
。从函数return
开始,函数中没有其他剩余代码将运行。
function prepareParams(user) {
var deferred = Q.defer();
var params = _.pick(user, 'email', 'password');
_.extend(params, {
grant_type : 'password',
client_id : 'client_id',
client_secret : 'client_secret'
});
deferred.resolve(params);
return deferred.promise;
}
请注意,唯一的变化是切换这两行。
您的回调中也存在语法错误,结束语)
应该在整个事件的末尾,而不是prepareParams
调用。这是因为您打算在.then
的结果上致电prepareParams
。这是它应该是什么样子:
prepareParams(userParams)
.then(function(params) {
// should work now :)
});