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);
}
我想在 promise 链中使用此函数,但它不返回值。
prepareParams(userParams))
.then(function(params) {
// ERROR!!! params == undefined
}
最佳答案
可以编写同步 Promise,但您必须确保首先调用 deferred.resolve(params)
。一旦您从函数返回
,该函数中的其他剩余代码将不会运行。
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
调用。这是因为您打算对 prepareParams
的结果调用 .then
。它应该是这样的:
prepareParams(userParams)
.then(function(params) {
// should work now :)
});
关于javascript - 如何编写返回具有正确值的 Q 库 promise 的 JS 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956742/