質問 1: 最初の ajax リクエストによって返されたデータを 2 番目の ajax のパラメーターとして使用する必要があり、2 番目の ajax は最初の ajax のコールバック関数で送信されます。しかし、問題があります!ただ、2回目にajaxから返されたデータをグローバルオブジェクトのプロパティに割り当てることができないということは、私が落とし穴に落ちたかどうかはわかりません。そこで $q を使って解決したいと思います。
質問 2: この例を見てみましょう。
// $q は組み込みサービスなので、直接使用できます。
ngApp.factory('UserInfo', ['$http', '$ q', function ($http, $q) {
return {
};
}]);
deferred.resolve は実行を遅らせるためですか?では、コールバック関数にロジックを記述できるのであれば、なぜわざわざ実行を遅らせる必要があるのでしょうか?
質問 3: deferred.promise によって返される Promise が最終的なデータ API であると言われるのはなぜですか?この約束にはどのような役割があるのでしょうか?
質問 4: Promise.then の実行ロジックは何ですか?
すべての質問に答える前に、まずサンプル コードについて簡単に説明させてください。 !
あなたのサンプルコードは、
Promise
の典型的な否定的な教材です。その特徴は、目的もなくdeferred
オブジェクトを作成することであり、コードの複雑さが増すだけです。これについては、アンチパターンをここで確認できます:Promise
的反面教材,其特征就是:无目的的创建deferred
对象,徒增代码复杂度。关于这点,可以看这里anti-pattern:首先,当你意识到自己正在忍受
callback hell
的时候,恭喜你,在javascript
这条路上,你算上道儿了。那么解决之道有哪些呢?我们最近常见的有:Promise
generator
配合coasync/await
关于这几种方式的详细介绍,我没仔细翻别人的答案(或许有更好的),只能把自己之前写的贴出来javascript里的异步
OK,介绍了解决
callback hell
的几种常见方式,再回头来说你的Promise
问题问题一:我需要用第一次发送ajax请求回的数据作为第二次ajax的参数,而第二次的ajax是在第一次ajax的回调函数里发送的。但是这里有问题!就是第二次ajax返回的数据不能赋值给全局对象的属性,不知道是不是掉到坑里了。所以想用$q解决。
既然我们寄希望于
Promise
能够解决回调地狱的问题,拿肯定不会再是使用回调的方式,你的疑惑是对的,可你的问题是没有充分理解Promise
是这么工作的。我先举个例子:问题二:那这个例子来说吧
这就是最早说的问题,你过度反应了,明显把简单问题复杂化了,这么写足矣:
调用的地方,直接用
#🎜🎜# #🎜🎜#まず第一に、then
コールバック地獄
に耐えていることに気づいたとき、おめでとうございます。あなたはjavascript
への道を進んでいます。では、解決策は何でしょうか?最近見たものは次のとおりです: #🎜🎜#約束
#🎜🎜#generator
は co#🎜🎜# と協力します非同期/待機
#🎜🎜#コールバック地獄
を解決する一般的な方法をいくつか紹介しました。その後、Promise
の問題に戻ります#🎜🎜# #🎜🎜#質問 1: 最初の ajax リクエストによって返されたデータを 2 番目の ajax のパラメーターとして使用する必要があり、2 番目の ajax は最初の ajax のコールバック関数で送信されます。しかし、問題があります!ただ、2回目にajaxから返されたデータをグローバルオブジェクトのプロパティに割り当てることができないということは、私が落とし穴に落ちたかどうかはわかりません。そこで $q を使って解決したいと思います。 #🎜🎜# #🎜🎜#Promise
がコールバック地獄の問題を解決できることを願っているため、今後はコールバックを使用しないことは間違いありません。しかし、あなたの質問はこのように完全には理解されていません。 >Promise は機能します。まずは例を挙げましょう: #🎜🎜# リーリー リーリー