首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Promises,将额外的参数传递给然后链

Promises,将额外的参数传递给然后链
EN

Stack Overflow用户
提问于 2015-10-03 01:15:37
回答 4查看 109.4K关注 0票数 108

一个承诺,只是举个例子:

代码语言:javascript
复制
var P = new Promise(function (resolve, reject) {
  var a = 5;
  if (a) {
    setTimeout(function(){
      resolve(a);
    }, 3000);
  } else {
    reject(a);
  }
});

在我们对promise调用.then()方法之后:

代码语言:javascript
复制
P.then(doWork('text'));

然后,doWork函数如下所示:

代码语言:javascript
复制
function doWork(data) {
  return function(text) {
    // sample function to console log
    consoleToLog(data);
    consoleToLog(b);
  }
}

如何避免在doWork中返回内部函数,以便访问promise和text参数中的数据?有什么技巧可以避免内部函数吗?

EN

回答 4

Stack Overflow用户

发布于 2015-10-05 08:15:44

也许最直接的答案是:

代码语言:javascript
复制
P.then(function(data) { return doWork('text', data); });

或者,因为这是标记为ecmascript-6的,所以使用箭头函数:

代码语言:javascript
复制
P.then(data => doWork('text', data));

我发现这篇文章可读性最好,而且不会写太多东西。

票数 107
EN

Stack Overflow用户

发布于 2017-10-22 18:53:28

使用currying。

代码语言:javascript
复制
var P = new Promise(function (resolve, reject) {
    var a = 5;
    if (a) {
        setTimeout(function(){
            resolve(a);
        }, 3000);
    } else {
        reject(a);
    }
});

var curriedDoWork = function(text) {
    return function(data) {
        console.log(data + text);
    }
};

P.then(curriedDoWork('text'))
.catch(
    //some error handling
);
票数 5
EN

Stack Overflow用户

发布于 2017-05-20 03:47:36

Lodash为这种情况提供了一个很好的替代方案。

代码语言:javascript
复制
 P.then(_.bind(doWork, 'myArgString', _));

 //Say the promise was fulfilled with the string 'promiseResults'

 function doWork(text, data) {
     console.log(text + " foo " + data);
     //myArgString foo promiseResults
 }

或者,如果您希望成功函数只有一个参数(履行承诺结果),您可以这样使用它:

代码语言:javascript
复制
P.then(_.bind(doWork, {text: 'myArgString'}));

function doWork(data) {
    console.log(data + " foo " + this.text);
    //promiseResults foo myArgString
}

这会将text: 'myArgString'附加到函数中的this上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32912459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档