我只是想在我的「alerts」對象中做一個簡單的循環,它包含一個url和一個單詞。 對於每個警報,我都會執行一個httpRequest來檢查該單詞是否出現在響應html代碼中。我是的,我把狀態變爲真實。通過url和httpRequest解析雲代碼循環
我也希望每一次更新「updatedTo」一欄,即使我沒有找到在響應HTML代碼的話,但我不知道爲什麼...
我寫了這個雲代碼,但它不起作用,或者它有時只有當我只有帶有單詞的項目時才起作用。
Parse.Cloud.job("updateStatus", function(request, status) {
Parse.Cloud.useMasterKey();
var counter = 0;
var AlertItem = Parse.Object.extend("Alert");
var query = new Parse.Query(AlertItem);
query.each(function(alert) {
var alertTitle = alert.get("title");
var alertUrl = alert.get("url");
var alertStatus = alert.get("status");
var alertWords = alert.get("research");
console.log("Alert : " + alertTitle + " - Check if : " + alertWords + " is on : " + alertUrl)
promise = promise.then(function() {
return Parse.Cloud.httpRequest({
url: alertUrl,
headers: {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25'
},
}).then(function(httpResponse) {
console.log("We succeded to access to the website");
var htmlCode = httpResponse.text;
if (htmlCode.indexOf(alertWords) >= 0) {
if (alertStatus == false) {
alert.set("status", true);
console.log("new status:true");
return alert.save();
}
} else {
alert.set("status", false);
console.log("new status:false");
//I do this to updated the "updatedTo" field, but it doesn't work
return alert.save();
}
// You need to return a Promise here if non of the above condition meet.
},
function(error) {
console.error('Request failed with response code ' + httpResponse.headers.Location);
// You need to return a rejected promise here.
}
});
});
return promise;
}).then(function() {
status.success('Status updated');
// Set the job's success status
}, function(error) {
// Set the job's error status
status.error("Uh oh, something went wrong.");
});
});
嗨,非常感謝您的回答!我承認我是JavaScript的初學者,我很難理解什麼是Promise。我閱讀了文檔,看起來Promise避免使用一次調用就能獲得成功的方法,但我在這裏沒有使用任何Promise。我有點迷失在這裏... – user2178964 2014-10-20 11:26:06
我編輯我的代碼,但我真的不明白我能做什麼,在此先感謝您的解釋... – user2178964 2014-10-20 11:32:15
任何幫助?謝謝 :) ! – user2178964 2014-10-22 11:41:30