ホームページ > ウェブフロントエンド > jsチュートリアル > AngularJS_AngularJS で複数の Promise を処理する方法

AngularJS_AngularJS で複数の Promise を処理する方法

WBOY
リリース: 2016-05-16 15:16:35
オリジナル
961 人が閲覧しました

AngularJS を使用して Promise を処理する場合、複数の Promise を処理する必要がある状況に遭遇することがあります。

最も簡単な解決策は、Promise ごとに then を設定することです。以下のように:

var app = angular.module("app",[]);
app.controller("AppCtrl", function($q. $timeout){
var one = $q.defer();
var two = $q.defer();
var three = $q.defer();
$timeout(function(){
one.resolve("one done");
}, Math.random() * 1000)
$timeout(function(){
two.resolve("two done");
}, Math.random() * 1000) 
$timeout(function(){
three.resolve("three done");
}, Math.random() * 1000) 
functioin success(data){
console.log(data);
}
one.promise.then(success);
two.promise.then(success);
three.promise.then(success);
})
ログイン後にコピー

もっと良い方法はありますか?

$q.all メソッドは Promise の配列を受け入れることができ、次のように呼び出されます:

var all = $q.all([one.promise, two.promise, three.promise]);
all.then(success);
ログイン後にコピー

約束とは何ですか?

Promise は、値を非同期に処理するメソッドであり、リモート オブジェクトを扱う場合、関数によってスローされる最終的な戻り値または例外を表します。 。 Promiseも非同期処理メソッドの一種だとすると、XHRや$.ajaxとの違いを考えてみますか?

JS ではクロージャまたはコールバックを使用して、ページが読み込まれた後の XHR リクエストなどの非同期に返されたデータに応答するのが一般的です。コールバック関数のトリガーに依存せずに、データが返されたかのように通常どおりデータを操作できます。

では、ng が提案した約束は、どのような問題を解決することを目的としているのでしょうか? コールバックは長い間使用されてきましたが、他のコールバックに依存するコールバックがあり、呼び出しのたびにエラーを表示する必要がある場合、通常はデバッグが非常に困難になります。違いは、Promise が別の抽象化を提供することです。これらの関数は Promise オブジェクトを返します。

Promise を使用する理由

Promise を使用する利点の 1 つは、コールバックの固定された思考ロジックから逃れられることです。 Promise は、同期関数に基づいて、非同期処理メカニズムを同期に似せて、期待どおりに戻り値と例外値をキャプチャできます。エラーはプログラム内でいつでも捕捉でき、プログラム例外に依存する後続のコードをバイパスできます。この同期の利点について考える必要はありません。したがって、Promise を使用する目的は、コードを非同期で実行する機能を維持しながら、機能の組み合わせとエラー バブリング機能を取得することです。

Promise はファーストクラスのオブジェクトであり、いくつかの規則があります。

• 解決または拒否は 1 つだけ呼び出されます。

• Promise が実行または拒否された場合でも、Promise に依存するハンドラーは引き続き呼び出されます。

• ハンドラーは常に非同期で呼び出されます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート