如何编写 returns Q 库承诺具有正确值的 JS 函数?
How to write JS function that returns a Q library promise with correct value?
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);
}
我想在承诺链中使用这个函数,但它没有 return 值。
prepareParams(userParams))
.then(function(params) {
// ERROR!!! params == undefined
}
可以编写一个同步 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
调用。这是因为您打算对 prepareParams
的结果调用 .then
。它应该是这样的:
prepareParams(userParams)
.then(function(params) {
// should work now :)
});
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);
}
我想在承诺链中使用这个函数,但它没有 return 值。
prepareParams(userParams))
.then(function(params) {
// ERROR!!! params == undefined
}
可以编写一个同步 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
调用。这是因为您打算对 prepareParams
的结果调用 .then
。它应该是这样的:
prepareParams(userParams)
.then(function(params) {
// should work now :)
});