我确实对此有一个简单的答案,而且我可能只是没有正确使用承诺但仍然如此。 假设我有一个返回promise的方法,我有一个方法需要接收两个参数才能工作,我实际上已经有了。 现在,因为我不希望我的功能无穷无尽,所以我将它们拆分为较小的功能,现在我无法掌握我的参数。 所以要清楚,这里有一些没有问题的工作(虽然可能有点原理图)
var origFeatures = [];
_.each(wrappedFeatures, function (wrappedFeature) {
bufferTasks.push(geometryEngineAsync.buffer(
[feature.geometry]
, feature.geometry.type === "polygon" ? [0] : [5]
, esriSRUnit_Meter));
}
}.bind(this));
all(bufferTasks).then(function(bufferedFeatures){
//doing something with the bufferedFeatures AND origFeatures
}.bind(this))
现在成像方法很长,所以当我分裂到这个
在
之前的某处定义 function _saveGeometries(bufferedFeatures){
//do something with buffered features AND the original features
}
var origFeatures= [];
_.each(wrappedFeatures, function (wrappedFeature) {
bufferTasks.push(geometryEngineAsync.buffer(
[feature.geometry]
, feature.geometry.type === "polygon" ? [0] : [5]
, esriSRUnit_Meter));
}
}.bind(this));
all(bufferTasks)
.then(this._saveNewGeometries.bind(this))
我当然看不到原始功能,因为它们不在包装功能的范围内
所以我尝试做的就是在中间创建一个函数并使用async结果和附加参数解析它,但附加参数是未定义的
var featuresFromAttachLayer = [];
_.each(wrappedFeatures, function (wrappedFeature) {
bufferTasks.push(geometryEngineAsync.buffer(
[feature.geometry]
, feature.geometry.type === "polygon" ? [0] : [5]
, esriSRUnit_Meter));
}
}.bind(this));
all(bufferTasks).then(function(bufferedFeatures) {
var deff = new Deferred();
deff.resolve(bufferedFeatures, wrappedFeatures);
return deff.promise;
})
.then(this._saveNewGeometries.bind(this))
任何想法如何以正确的方式传递参数,无论是在良好的代码方面还是技术方面。