snoowrapライブラリは、関数を使用して関数を呼び出したときに約束を返します。私はノードが呼び出しが完了するまで待ってから、そのコールバック関数を実行したいと思います。どうやってやるの?私は、setTimeout、wait.forライブラリ、および他のソリューションを使用するさまざまな形を試しましたが、どれもうまくいきませんでした。無限ループ中にノードが約束を待つようにするには?
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