Javascript 异步/等待不在while循环中实际等待
在项目快结束时,我意识到,对于它的最后一个组件,我别无选择,只能使用Async、wait和Promise,以便程序等待API调用完成,然后继续。尽管我已经了解到Javascript中确实没有停止或等待的功能。我试过下面的代码,它在没有while循环的情况下工作,但是有了它,它就停止工作了。我希望程序发送一个tweetapi调用几次,但我觉得sendOff函数实际上并没有等待,循环只是跳过它,因为它太快了,没有等待API调用完成。非常感谢您的任何帮助或其他方法 函数发送tweets{ 返回新承诺解析,拒绝=>{ 客户端。发布“状态/更新”、最终推文、函数错误、推文、响应{ 如果错误{ 拒绝错误; } 分解反应; }; }; } 异步函数发送{ 等待发送推文; } 而1{ var final_tweet={//Create tweet struct 状态:嗨! } 送别; 睡眠;Javascript 异步/等待不在while循环中实际等待,javascript,node.js,api,loops,async-await,Javascript,Node.js,Api,Loops,Async Await,在项目快结束时,我意识到,对于它的最后一个组件,我别无选择,只能使用Async、wait和Promise,以便程序等待API调用完成,然后继续。尽管我已经了解到Javascript中确实没有停止或等待的功能。我试过下面的代码,它在没有while循环的情况下工作,但是有了它,它就停止工作了。我希望程序发送一个tweetapi调用几次,但我觉得sendOff函数实际上并没有等待,循环只是跳过它,因为它太快了,没有等待API调用完成。非常感谢您的任何帮助或其他方法 函数发送tweets{ 返回新承诺
} 您可能已经注意到,不能在函数范围之外使用wait 如果要将while循环放在异步函数中,在异步函数中可以等待发送,那么它应该可以工作
(async () => {
while (true) {
var final_tweet = { // Create tweet struct
status: "Hi!"
}
await sendOff();
}
})();
使用JavaScript避免声明新函数
您还必须全局声明final_tweet,因为它没有在sendteets中定义。要么这样,要么将其作为函数参数@尼廷·戈亚尔在他的回答中就是这么做的
因此:
您可能已经注意到,不能在函数范围之外使用wait 如果要将while循环放在异步函数中,在异步函数中可以等待发送,那么它应该可以工作
(async () => {
while (true) {
var final_tweet = { // Create tweet struct
status: "Hi!"
}
await sendOff();
}
})();
使用JavaScript避免声明新函数
您还必须全局声明final_tweet,因为它没有在sendteets中定义。要么这样,要么将其作为函数参数@尼廷·戈亚尔在他的回答中就是这么做的
因此:
您必须将while循环放在async中,并使用await for语句以同步执行它们
您可以在异步内部进行包装,如下所示,并省略不必要的发送方法。此外,您还应将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);
}
})()
您必须将while循环放在async中,并使用await for语句以同步执行它们
您可以在异步内部进行包装,如下所示,并省略不必要的发送方法。此外,您还应将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);
}
})()
签出:签出: