$q.when(promise)→promise
$q.when(nonPromise)→promise指定された value に非同期的に解決されるnew nonPromise。
何があるか見てみましょう$q.when:
$q.when = function (foreignPromise) {
var deferred = $q.defer();
foreignPromise.then(function (data) {
deferred.resolve(data);
$rootScope.$digest();
}, function (reason) {
deferred.reject(reason);
$rootScope.$digest();
});
return deferred.promise;
}
工場出荷時のリターン $q.when(data)
ご覧$q.whenのとおり、 promise または nonPromise を受け取り、それをラップします。
工場の例:
fessmodule.factory('Data', ['$resource','$q', function($resource, $q) {
var data = [
{
"PreAlertInventory": "5.000000",
"SharesInInventory": "3.000000",
"TotalSharesSold": "2.000000",
"TotalMoneySharesSold": "18.000000",
"TotalSharesBought": "0.000000",
"TotalShareCost": "0.000000",
"EstimatedLosses": "0.000000"
}
];
var factory = {
query: function (selectedSubject) {
return $q.when(data);
}
}
return factory;
}]);
これでコントローラーから呼び出すことができます:
Data.query()
.then(function (result) {
$scope.data = result;
}, function (result) {
alert("Error: No data returned");
});
デモFiddle
工場は $q.when(data) || を返します。データ
この例から、promise を返します。それでは、少し変更してみましょう。
代わりreturn $q.when(data);に、次のように書きます。
return $q.when(data) || data;
それもうまくいきます。しかし、その逆ではありません。
私が理解しているように、Angular はコントローラーがDataサービスから待機していることを認識しており、上記のステートメントは 1st off を使用し$q.when(data)ます。
デモ 2Fiddle
|| 工場出荷時の戻りデータ || $q.when(データ)
Data次の方法でサービスを呼び出しましょう。
$scope.data = Data.query();
約束はありません。通話は同期されます。
工場は次のようになります。
fessmodule.factory('Data', ['$resource','$q', function($resource, $q) {
var data = [
{
"PreAlertInventory": "5.000000",
"SharesInInventory": "3.000000",
"TotalSharesSold": "2.000000",
"TotalMoneySharesSold": "18.000000",
"TotalSharesBought": "0.000000",
"TotalShareCost": "0.000000",
"EstimatedLosses": "0.000000"
}
];
var factory = {
query: function (selectedSubject) {
return data || $q.when(data);
}
}
return factory;
}]);
デモ 3Fiddle
私の結論
私たちのreturn data || $q.when(data)サービスが単一の値または約束を返すことができることを意味します。しかし、サービスが返すデータの種類はわかっているため、このステートメントには意味がありません。またはdataまたはpromise。