如何编写 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 :)
  });