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

标签 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);
}

我想在 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/

相关文章:

javascript - 带有 Promise 的 AWS Javascript SDK

javascript - 如何使用 $q.all 跨多个异步函数处理 $http.get 的结果

javascript - 防止 toFixed 对非常小的小数进行四舍五入

javascript - 关于 JQuery 自动调整大小

javascript - 如何从json渲染mustache js

javascript - 使用 promises 从 mongo db 检索对象时出错

javascript - AngularJS 处理 $q.all 中被拒绝的资源

javascript - 带有 typescript require 和 .d.ts 文件的 Node.js

javascript - 如何在 PHP 中进行 ajax 操作?

javascript - 如何用 Angular 设置cookie