私はJavaスクリプトの.thenチェインで混乱しています。把握しようとすると、以下の問題を解決できませんでした。Javaスクリプトのチェーンチェンジがこのコンテキストを失う
私はthis.arrayAとthis.arrayBの2つの配列を持っていますが、functionAとfuncitonBはそれらをそれぞれ移入してから、それらの2つの配列をfuncitonCで使いたいと思います。
return functionA(this) //returns promise resolve , populates this.arrayA
.then(functionB(this)) //returns promise resolve , populates this.arrayB
.then(functionC(this)) //returns promise rejected if condition=true else resolves promise
は、私は以下のようにそれを割り当てることで、「この」コンテキストを渡すためにしようとしていますが、私は常に参照を失っと関数Bに私はいつもfunctionA.Iの出力は以下のコードを試してみましたが、それは動作しません取得します。
var self = this;
return functionA(this) //returns promise resolve , populates this.arrayA
.then(functionB.bind(self)) //returns promise resolve , populates this.arrayB
.then(functionC.bind(self)) //returns promise rejected if condition=true else resolves promise
var _ = require('loadash');
functionA(that){
return new Promise(function(resolve, reject) {
resolve(
_.each(that.items1, function(item1){
var someStruct = {
name: item1.name,
type: item1.type
}
that.arrayA.push(someStruct);
}
)
});
}
functionB(that){
return new Promise(function(resolve, reject) {
resolve(
_.each(that.items2, function(item2){
var someStruct = {
name: item2.name,
type: item2.type
}
that.arrayB.push(someStruct);
}
)
});
}
functionC(that){
return new Promise(function(resolve, reject){
_.each(that.arrayA, function(someItems){
_.find(that.arrayB , function(someMoreItems){
if (someItem.name === someMoreItems.name && someItem.type != someMoreItems.type){
reject(Error("it's broken"))
}else{
resolve()
}
});
});
});
}
この問題を解決できるように教えてもらえますか?
おかげ
は、... 2番目のスニペットが見えます(あなたドン最初のスニペットでやっていることとは違って、それぞれの関数を 'this'にバインドするだけです。) - 関数が何をしているのかを見ることなく、誰が –
のコードを表示しているのでしょうか? 'functionC' –
とBとAは実際に何が起こっているか見るために –