をあざけるを持つ:が、私はこの機能をモックとしたい難易Promise.all
function getMetaData(key) {
var deferred = $q.defer();
var s3 = vm.initiateBucket();
var params = {
Bucket: constants.BUCKET_NAME,
Key: key
};
s3.headObject(params, function(error, data) {
if(error) {
deferred.reject(error);
}
else {
console.log(data);
deferred.resolve(data.Metadata);
}
});
return deferred.promise;
};
私はこの機能をモックとしspyOnを使用しています:
spyOn(awsServices, 'getMetaData').and.callFake(function() {
console.log("MOCKED");
return $q.resolve({
key: "MOCKED_KEY",
description: "MOCK_DESCRIPTION",
views: 1
});
});
をスパイが動作しているようです - "MOCKED" console.logが呼び出されています。ここでのgetMetaDataを呼び出す関数は次のとおりです。
function getPicsRadius(){
//Ommitted
var promises = [];
promises.push(awsServices.getMetaData(momentsInStates[i].Key)
.then(function(metaData) {
console.log(metaData);
return {
key: metaData.key,
description: metaData.description,
views: metaData.views
};
}))
}
return promise.all(promises);
これは約束のチェーンを使用して別の関数によって呼び出されます。
function getNearbyMoments() {
//omitted
return calculateNearbyStates()
.then(getPicsByState)
.then(concatPics)
.then(getPicsWithinRadius).then(function(){
console.log("SHOULD LOG BUT IS NOT");
});
}
にconsole.log最後に印刷がありません。私が得ている唯一のエラーは、非同期タイムアウトエラーです。したがって、getMetaData(MOCKED) - > getPicsRadius - > getNearbyMoments(then関数には入りません)でなければなりません。私はこれがプロミスと何か関係があると思っています。私は定期的な約束を悩むことが決してないので、私が帰ってきています。どんな洞察?
'getPicsRadius'関数で' promise.all'の代わりに '$ q.all'を使ってみましたか? –
ES6の約束事は、AngularJSフレームワークとそのダイジェストサイクルと統合されていません。 AngularJSの実行コンテキストで適用される操作だけが、AngularJSのデータバインディング、例外処理、プロパティの監視などから利益を得ます。代わりに、[Promise.all]の場合は、[$ q.allメソッド](https:// docs。 angularjs.org/api/ng/service/$q#all)。 – georgeawg
'getPicsRadius()'中の 'return promise.all(約束);の呼び出しを想定しています。この関数は単に質問のタイプミスですか? – Rhumborl