我有一系列步骤需要按顺序完成:
示例对象如下所示:
`{
options: [{
text: 'Pizza',
votes: 0,
imageURL: ""
}, {
text: 'Hot Dog',
votes: 0,
imageURL: ""
}]
};`
因为这个系列中的顺序,我使用promises来确保一切按照上面指定的顺序进行。到目前为止,我有:
function validatePoll() {
var isValid = true;
for (var i = 0; i < $scope.poll.options.length; i++) {
if (!$scope.poll.options[i].text) {
isValid = false;
break;
}
}
return isValid;
}
let promiseURL = function(searchTerm) {
return new Promise(function(resolve, reject) {
$http.get('https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=' + searchTerm + '&count=1&offset=0&mkt=en-us&safeSearch=Strict', {
headers: {
'Ocp-Apim-Subscription-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
}
}).success(function(response) {
console.log(response);
resolve(response);
}).error(function (err, status) {
reject(err);
})
})
};
let fetchImageURL = function() {
for(var i = 0; i < $scope.poll.options.length; i++) {
console.log(promiseURL($scope.poll.options[i].text));
}
}
$scope.submitChoice = function() {
var isValid = validatePoll();
if(isValid) {
fetchImageURL();
} else {
console.log("Not Valid Poll");
}
}
&#13;
但最终发生的是 console.log(promiseURL($ scope.poll.options [i] .text)); fetchImageURL中的返回未解析的promise而不是响应字符串I想改为。我怎样才能修复代码以确保:
答案 0 :(得分:3)
你看到了Promise的打印输出,因为你打印出了承诺。您需要处理承诺解决/拒绝。你应该叫什么:
promiseURL($scope.poll.options[i].text)
.then(function(data){
console.log("Success",data)
})
.catch(function(error){
console.log("Error",error")
})
答案 1 :(得分:0)
承诺通常如下使用:
promise.then(function(result) {
console.log(result); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
});
promise
本身的位置:
var promise = new Promise(function(resolve, reject) {
// do a thing, possibly async, then…
if (/* everything turned out fine */) {
resolve("Stuff worked!");
}
else {
reject(Error("It broke"));
}
});
在您的循环中,您在then
上呼叫promiseURL($scope.poll.options[i].text)
并不是一回事。尝试做类似的事情:
for(var i = 0; i < $scope.poll.options.length; i++) {
promiseURL($scope.poll.options[i].text).then(function(result) {
console.log(result); // "Stuff worked!"
});
}
请参阅https://developers.google.com/web/fundamentals/getting-started/primers/promises以获取有关承诺的精彩入门。