私はリクエストからデータを受け取り、それを表示する前に、受け取った生のコンテンツをadd/format/generate/orderのように処理します。JavaScriptの関数を流すベストプラクティス
ここ私がデータを受信方法、およびどのように私はprocessData
機能
this.httpService.get(`this/is/my/url`, body).then((data) => {
this.processData(data).then((result) => {
this.data = result;
}, (error) => {
this.error = error;
});
}, (error) => {
this.error = error;
});
に送っはprocessData
機能が約束関数を呼び出す必要があります。
私はprocessData
関数を記述するための2つの方法を参照してください。
function processData(data) {
step1().then((result) => {
step2().then((result) => {
step3().then((result) => {
step4();
return data;
}, (error) => {
reject(error);
});
}, (error) => {
reject(error);
});
}, (error) => {
reject(error);
});
function step1() {
//...
}
function step2() {
//...
}
function step3() {
//...
}
function step4() {
//...
}
}
第二の方法
まず道
function processData(data) {
return new Promise((resolve, reject) => {
step1();
function step1() {
this.myService.yolo(data).then({
//...
step2();
}, (error) => {
reject(error);
});
}
function step2() {
this.myService.foo(data).then({
//...
step3();
}, (error) => {
reject(error);
});
}
function step3() {
this.myService.bar(data).then({
//...
step4();
}, (error) => {
reject(error);
});
}
function step4() {
//...
resolve(data);
}
});
}
を第二の方法は、あなたドンので、私は、より論理的に感じさせます何が起こっているのかを理解するために、step
関数の内容を見る必要はありませんが、とても混乱します!
10ステップでは、これは読めません。
だから私はそれを行うには良い方法が何だろうと思っていた!
ありがとうございます!そして、約束の誤りをどう処理するのですか? step2が失敗した場合と同様に、step4に進みますか? –
@Citizen:拒否は、拒否のために登録された最初のハンドラに到達するまで伝搬され、解決のためにのみ登録されたものはスキップされます。だから、 'a.then(b).then(c).catch(...)'は、 'a'が解決するのではなく拒否すれば' a'から 'catch'にまっすぐに行きます。 –