現在のエンドの1回の操作で、関連するバックグラウンドインタフェースが複数呼び出されます.


履歴のため、フロントエンドの1回の操作では複数のバックグラウンドインタフェースを呼び出す必要があります.以前は1つを呼び出すように書かれていましたが、複数であってもインタフェース間に依存することはありません.しかし、最近のニーズでは、フロントエンドの1回の操作で2つのバックグラウンドインタフェースを呼び出す必要があり、この2つのインタフェースは関連しており、インタフェースAを呼び出してからインタフェースBを呼び出す必要があります.
最初は2つのPromiseを直接書き、1つが成功した後にもう1つを呼び出すのは、このようなものです.
 fetch(urlA)
	 .then((res) => {
	 	if (res.ret == 0) {
		 	fetch(urlB)
			 	.then(() => {
					///
				})
				.catch(e) {
				}
		}

	 })
	 .catch(e){
	 }

すべてがこんなに美しく見えて、テストの同級生が2番目のインタフェースが呼び出せないことに気づくまで.
自分が失敗を考えていないことに気づいた.インタフェースAの呼び出しに失敗した場合、インタフェースBは呼び出さない.では、ユーザが最初に操作したと仮定すると、呼び出しインタフェースAは成功したが、バックグラウンドで何らかの理由でBインタフェースが一時的に停止したり、ネットワークの問題でBインタフェースの呼び出しに失敗したりする.ユーザが2回目の操作を行うと,インタフェースAは保護機構のため,以前に1回呼び出されていたが,今回のエラーコードは0以外を返し,インタフェースBが呼び出されなくなる.また,ユーザがどんなに再試行しても呼び出せない.
バックグラウンドと協議した後、インタフェースAを採用することを決定した結果、ゼロでなくてもインタフェースBを呼び出すことを試みる.フロントエンドはapp、ウェブページ、ウィジェットを再起動するため、インタフェースAを呼び出したことがあるかどうかを確保できない可能性があるため、ユーザーの操作フローはインタフェースAを呼び出すことであり、インタフェースAが功を奏するかどうかにかかわらず、インタフェースBを呼び出し、バックグラウンドはインタフェースBの呼び出しを判定する.インタフェースAが呼び出されたか否かが判断され、呼び出されていなければ処理されない.
後で思い出すと、実はこれは常識です.
  • インタフェース呼び出しは失敗する可能性があります.失敗した場合を考慮しなければなりません.
  • は、複数の関連するインタフェースを一度に呼び出す操作であり、いくつかのインタフェースが失敗する可能性があることを考慮する
  • .
  • フロントエンドは無状態にし、インタフェース呼び出しに失敗した後、回復できるようにし、次回要求を開始できるようにし、インタフェース
  • を正常に呼び出すことができるようにする.
    先端面ではまだ踏み穴が足りず、その常識が今になって分かったのですが・・・