在雲代碼背景的工作,我有一種從API獲取信息的一個方法:返回Pase.Query.each承諾()不工作
var getUserPageView=function(userid){
var promise=new Parse.Promise();
Parse.Cloud.httpRequest({
url: 'http://apiip.ch/api.php?date='+
formatDate(new Date())
}).then(function(httpResponse) {
// success
var text=httpResponse.text;
var obj=JSON.parse(text);
promise.resolve(parseInt(obj[0][1]));
},function(httpResponse) {
// error
console.error('Request failed with response code ' + httpResponse.status);
promise.reject();
});
return promise;
};
因爲我有打電話給所有用戶用於檢索關於一個特定用戶的信息的API。 按照specification of the "each()" function:
如果回調函數返回一個承諾,迭代不會繼續下去,直到這個承諾已履行完畢。
我返回一個承諾,當API返回結果時將會實現。
query=new Parse.Query(Parse.User);
query.each(function(user){
var promise=Parse.Promise().as();
promise=promise.then(function(){
getUserPageView(234).then(function(result){
console.log("User page view:"+ result);
//process user with API information
promise.resolve("a");
},function(){
console.log("error");
});
});
console.log("user processed");
return promise;
}).then(function(){
status.success("Credti update successfull.");
}, function(error){
status.error("Uh oh, something went wrong.");
});
問題是getUserPageView()永遠不會被調用。或者更確切地說,我認爲「each()」函數並不等待承諾實現。這裏有什麼問題?
謝謝你,現在我讓它與您的建議工作。我必須在getUserPageView()。then()函數中添加一個返回結果。所以: 返回getUserPageView(234)。然後(函數(結果){ 的console.log( 「用戶頁面視圖:」 +導致); 返回結果; },函數(誤差){ 的console.log(」錯誤「); }); – Simoyw