gpt4 book ai didi

javascript - Async/Await 实际上并没有在 while 循环中等待

转载 作者:行者123 更新时间:2023-12-02 16:21:16 28 4
gpt4 key购买 nike

在我的项目即将结束时,我意识到对于它的最后一个组件,我别无选择,只能使用 Async、Await 和 Promise,以便程序等待 API 调用完成,然后继续。尽管我了解到 Javascript 中确实没有“停止”或“等待”。我试过下面的代码,它在没有 while 循环的情况下也能工作,但有了它,它就停止工作了。我希望程序多次发送推文 API 调用,但我觉得 sendOff() 函数实际上并没有在等待,循环只是跳过它,因为它运行得太快并且没有等待 API 调用完成。非常感谢任何帮助或不同的攻击方法。

function sendTweets() {
return new Promise ((resolve, reject) => {
client.post('statuses/update', final_tweet, function(error, tweet, response) {
if (error) {
reject(error);
}
resolve(response);
});
});
}

async function sendOff() {
await sendTweets();
}


while (1) {

var final_tweet = { // Create tweet struct
status: "Hi!"
}

sendOff();

sleep.sleep(4);
}

编辑:对于遇到同样问题的人

下面的代码结束了

function sendTweets(final_tweet) {
return new Promise ((resolve, reject) => {
client.post('statuses/update', final_tweet, function(error, tweet, response) {
if (error) {
reject(error);
}
resolve(response);
});
});
}

(async () => {
while (1) {
var final_tweet = { // Create tweet struct
status: "Hi!"
}
await sendTweets(final_tweet);
await sleep.sleep(4);
}
})().catch(e => { console.error(e) }) // Catch needed to prevent "Unhandled Promise Rejection" error

非常感谢@knobiDev @TARN4TION @Nitin Goyal

最佳答案

您必须将 while 循环放在 async 中,并使用 await 语句才能同步执行它们。

您可以将 while 包装在 async 中,如下所示,并省略不必要的 sendOff() 方法。您还应该将 final_tweet 作为参数传递。

function sendTweets(final_tweet) {
return new Promise ((resolve, reject) => {
client.post('statuses/update', final_tweet, function(error, tweet, response) {
if (error) {
reject(error);
}
resolve(response);
});
});
}

(async () => {
while (1) {
var final_tweet = { // Create tweet struct
status: "Hi!"
}
await sendTweets(final_tweet);
await sleep.sleep(4);
}
})()

关于javascript - Async/Await 实际上并没有在 while 循环中等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65388807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com