一个承诺,只是举个例子:
var P = new Promise(function (resolve, reject) {
var a = 5;
if (a) {
setTimeout(function(){
resolve(a);
}, 3000);
} else {
reject(a);
}
});
在我们对promise调用.then()
方法之后:
P.then(doWork('text'));
然后,doWork
函数如下所示:
function doWork(data) {
return function(text) {
// sample function to console log
consoleToLog(data);
consoleToLog(b);
}
}
如何避免在doWork中返回内部函数,以便访问promise和text参数中的数据?有什么技巧可以避免内部函数吗?
发布于 2015-10-05 08:15:44
也许最直接的答案是:
P.then(function(data) { return doWork('text', data); });
或者,因为这是标记为ecmascript-6
的,所以使用箭头函数:
P.then(data => doWork('text', data));
我发现这篇文章可读性最好,而且不会写太多东西。
发布于 2017-10-22 18:53:28
使用currying。
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
);
发布于 2017-05-20 03:47:36
Lodash为这种情况提供了一个很好的替代方案。
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
}
或者,如果您希望成功函数只有一个参数(履行承诺结果),您可以这样使用它:
P.then(_.bind(doWork, {text: 'myArgString'}));
function doWork(data) {
console.log(data + " foo " + this.text);
//promiseResults foo myArgString
}
这会将text: 'myArgString'
附加到函数中的this
上下文。
https://stackoverflow.com/questions/32912459
复制相似问题