难以嘲笑 Promise.all
Having difficulty mocking 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 函数)。我怀疑这与我返回的 Promise.all 有关,因为我在监视常规承诺方面从来没有遇到过麻烦。有什么见解吗?
ES6 承诺未与 AngularJS 框架及其摘要循环集成。
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性 监视等。
而不是 Promise.all
,使用 $q.all method。
我想模拟这个功能:
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 函数)。我怀疑这与我返回的 Promise.all 有关,因为我在监视常规承诺方面从来没有遇到过麻烦。有什么见解吗?
ES6 承诺未与 AngularJS 框架及其摘要循环集成。
AngularJS 通过提供自己的事件处理循环来修改正常的 JavaScript 流程。这将 JavaScript 分为经典和 AngularJS 执行上下文。只有在 AngularJS 执行上下文中应用的操作才能受益于 AngularJS 数据绑定、异常处理、属性 监视等。
而不是 Promise.all
,使用 $q.all method。