我正在编写一个使用大量承诺的节点应用程序。为了保持我的代码可读性,我尽量删除尽可能多的匿名函数,并将它们存储在一个JavaScript对象中,如下所示。
let myCallbacks = {
myFirstCallback: function(fulfill, reject) {
// Do some stuff
if(noError)
fulfill({field: 'data'});
else
reject('ERROR');
},
mySecondCallback: function(fulfill, reject) {
// Do some stuff
if(noError)
fulfill({field: 'data'});
else
reject('ERROR');
}
}
let myFirstMethod = function() {
return new Promise(myCallbacks.myFirstCallback);
}
let mySecondMethod = function() {
return new Promise(myCallbacks.mySecondCallback);
}
这很有效。
现在我有一个功能,我需要将数据传递给我的回调。想象一下以下代码
let myCallbacks = {
myFirstCallback: function(fulfill, reject) {
// Do some stuff
if(noError)
fulfill({field: 'data'});
else
reject('ERROR');
},
mySecondCallback: function(fulfill, reject) {
// Do some stuff
if(noError)
fulfill({field: 'data'});
else
reject('ERROR');
},
myThirdCallback: function(fulfill, reject, someVariable) {
// Do some stuff
if(someVariable*3>10)
fulfill({field: 'data'});
else
reject('ERROR');
}
}
let myFirstMethod = function() {
return new Promise(myCallbacks.myFirstCallback);
}
let mySecondMethod = function() {
return new Promise(myCallbacks.mySecondCallback);
}
let myThirdMethod = function(someVariable) {
// Doesn't work
return new Promise(myCallbacks.myThirdCallback);
// Doesn't work
return new Promise(myCallbacks.myThirdCallback(fulfill, reject, someVariable);
// Doesn't work
return new Promise(myCallbacks.myThirdCallback(someVariable));
}
将someVariable从myThirdMethod传递给myCallbacks.myThirdCallback()的正确方法是什么?
答案 0 :(得分:0)
您可以执行以下操作:
var thatOtherCallback = function(variable)
{
return function(fulfill, reject)
{
... use variable and do whatever you need to do ...
}
}
...
new Promise(thatOtherCallback(value));
但是如果没有更清楚地了解你想要实现的目标,很难说这是否是一个很好的解决方案。