snoowrap庫在函數調用時使用它返回一個promise。我希望節點等待,直到調用完成,然後執行其回調函數。我怎樣才能做到這一點?我嘗試過使用setTimeout,wait.for庫和其他解決方案的不同形式,但都沒有奏效。如何讓Node等待promise在無限while循環中完成?
while(1){
for (var i = 0; i < allowableTimes.length; i++) {
if (new Date().getTime() == allowableTimes[i].getTime()) {
reddit.getHot('aww', {limit: 1}).then(sendToSlack);
}
}
}
function sendToSlack(res){
var url = res[0].url;
var title = res[0].title;
bot.sendWebhook({
username: "bawwt",
icon_emoji: ":smile_cat:",
text: "<" + url + "|" + title + ">",
channel: "#random"
});
}
解決:這裏是低於該解決方案基於接受的答案代碼爲我工作:
if (!err) {
reddit.getHot('aww', {limit: 1}).then(handleReddit);
}
});
function handleReddit(res) {
for (var i = 0; i < allowableTimes.length; i++) {
if (validTime(allowableTimes[i])) {
sendToSlack(res);
}
}
queryReddit();
}
function validTime(allowableTime) {
var date = new Date();
var hour = date.getHours();
var minute = date.getMinutes();
var allowableHour = allowableTime.getHours();
var allowableMinute = allowableTime.getMinutes();
return hour == allowableHour && minute == allowableMinute;
}
function queryReddit() {
setTimeout(function() {reddit.getHot('aww', {limit: 1}).then(handleReddit);}, 60000);
}
function sendToSlack(res){
var url = res[0].url;
var title = res[0].title;
bot.sendWebhook({
username: "bawwt",
icon_emoji: ":smile_cat:",
text: "<" + url + "|" + title + ">",
channel: "#random"
});
}
假設你的意思是'reddit.getHot()'調用。你確定要等待電話完成嗎?我想這就是'sendToSlack'回調的用途。在節點中,您不應該在回調中阻塞服務器的其餘部分。 相反,您應該使'sendToSlack'成爲一個遞歸函數,處理回調並觸發'reddit.getHot()'的另一個調用並擺脫循環 – Monokh
sendToSlack函數使用reddit.getHot函數的結果,但函數永遠不會完成,並且節點似乎很快就會循環。如果有幫助,我會添加sendToSlack的內容。 – uioporqwerty