2017-11-23 16 views
-1

非同期関数内の約束関数が決して解決または拒否されないと、何が起こるのでしょうか?内部の保存方法の中では初期条件が満たされなかった場合は何が起こりますか、エラーは発生しません。応答が受信するまで?同期関数内のプロミスは解決されません

save().then(results=>{ 

}) 

save():promise<any>{ 
    if (conditionA) { 
    return http request 
    } 
    if (conditonB) { 
    return http request} 
    } 
} 
+1

これは、決して解決しない約束があることを意味するものではなく、関数が約束を作成せず、 '.then()'が 'undefined'で呼び出されたときに例外をスローするということを意味します。それをしないでください。 – Bergi

+0

はい現在、これに関連する古いコードのバグfixofを行っています。これは未定義の呼び出しができないことを示しています。なぜこれが問題かどうかを確認したいのですが。 – Heshan

答えて

1

約束が時々約束を返すなら、それは常に約束を返すべきです。いくつかのコードパスに戻ることを約束する必要がない場合、通常のデザインパターンは、return Promise.resolve()を実行するだけです。あなたの機能のために意味をなすために上記...部分を埋める

save().then(results=>{ 

}) 

save():promise<any>{ 
    if (conditionA) { 
    return request(...); 
    } else if (conditonB) { 
    return request(...); 
    } else { 
    return Promise.resolve(...); 
    } 
} 

:だから、あなたはこのような何かをしたい、あなたの擬似コードをキープ。しかし、時には約束を返すと、いつも約束が返ってくる。次に、呼び出し元は返された約束を一貫して使用できます。作業がすでに完了している場合(または何もしない場合)は、すでに解決済みの約束を返すだけで、呼び出し元はいつも約束として使用できる一貫した戻り値を取得します。


あなたの質問のタイトルと一致するものはありませんが、あなたの質問の本文と完全に一致しています。あなたのタイトルは間違っているのでしょうか、質問の説明の一部が欠落していますか?

+0

ありがとうございます。@ jfriend00 コメント既存のコードにいくつかのバグを修正し、「未定義のエラー」が発生していると言いました 他には存在しないと約束しているので、エラーが発生すると思いました。作成されたもので解決されたケースではない – Heshan

+0

@Heshan - 後で来る人は混乱しないように、私はあなたの質問の下で "編集"リンクを使用し、あなたの質問のタイトルを変更して、 。 – jfriend00

+0

ええ、ありがとう – Heshan

関連する問題