Javascript 创建返回两个函数的元组的函数
基本上,我想创建一个函数,返回两个可以在ES6 Promise API中使用的函数。我想这叫做“元组”。大概是这样的:Javascript 创建返回两个函数的元组的函数,javascript,node.js,es6-promise,Javascript,Node.js,Es6 Promise,基本上,我想创建一个函数,返回两个可以在ES6 Promise API中使用的函数。我想这叫做“元组”。大概是这样的: //start code var provider = function (a) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(a * 5); }, 2000); });
//start code
var provider = function (a) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(a * 5);
}, 2000);
});
};
function makeProviders(num){
return [
function onResolved(){
return provider(num);
},
function onRejected(){
console.error('Dahm daniel.');
}
]
}
provider(5).then.apply(null, makeProviders(3)).then(function(val){
console.log('val => ', val);
});
//end code
然而,我得到了一个奇怪的错误:
provider(5).then.apply(null, makeProviders(3)).then(function(val){
^
TypeError: Cannot read property 'constructor' of null
at then (native)
at Object.<anonymous> (/Users/Olegzandr/WebstormProjects/oresoftware/siamese/test/test2.js:32:18)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:134:18)
at node.js:962:3
provider(5).then.apply(null,makeProviders(3)).then(函数(val){
^
TypeError:无法读取null的属性“构造函数”
当时(本地)
在对象上。(/Users/Olegzandr/webstromprojects/oresoftware/siamese/test/test2.js:32:18)
在模块处编译(Module.js:409:26)
在Object.Module.\u extensions..js(Module.js:416:10)
在Module.load(Module.js:343:32)
在Function.Module.\u加载(Module.js:300:12)
位于Function.Module.runMain(Module.js:441:10)
启动时(node.js:134:18)
在node.js:962:3
这是从一个函数返回两个函数以立即调用另一个函数的正确方法(或唯一方法)吗?这是一个猜测,但我认为唯一简单的正确方法是使用新的扩展运算符: 我必须用巴贝尔(我想)来测试它,但答案是:
provider(5).then(...makeProviders(3)).then(function(val){
console.log('val => ', val);
});
您必须使用“扩展运算符”
您的问题是将错误的
此
值传递给应用
。若要工作,需要
Promise.prototype.then.apply(provider(5), makeProviders(3))
正如其他答案中所指出的,这也可以通过ES6中的扩展语法优雅地解决。但是,根据您的用例,比创建返回函数元组的函数更好的解决方案可能是将一个承诺转换为另一个承诺的函数:
function makeProviders(promise, num){
return promise.then(function onResolved(){
return provider(num);
}, function onRejected(){
console.error('Dahm daniel.');
});
}
makeProviders(provider(5), 3).…
或更优雅地使用:
或者,如果您想关注结果的可重用性,可以使用currying:
function makeProviders(num){
function onResolved(){
return provider(num);
}
function onRejected(){
console.error('Dahm daniel.');
}
return promise => promise.then(onResolved, onRejected);
}
var myProviders = makeProviders(3);
myProviders(provider(5)).…
现在发生的情况肯定是,promise中的promise对象(this)现在绑定为null,而不是promise对象实例本身。因此,这种方法似乎不起作用。谢谢;)你有这个权利,如果有其他的方法,lmkyou比我更容易找到答案,谢谢,OP更多的是一个练习,而不是实际思考一个真正的用例,但是你的看起来不错
function makeProviders(num){
return this.then(function onResolved(){
return provider(num);
}, function onRejected(){
console.error('Dahm daniel.');
});
}
provider(5)::makeProviders(3).…
function makeProviders(num){
function onResolved(){
return provider(num);
}
function onRejected(){
console.error('Dahm daniel.');
}
return promise => promise.then(onResolved, onRejected);
}
var myProviders = makeProviders(3);
myProviders(provider(5)).…