如何编写JS函数,返回具有正确值的Q库promise?

时间:2016-03-12 10:54:59

标签: javascript q

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
}

1 个答案:

答案 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 :)
  });