Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步/等待不在while循环中实际等待_Javascript_Node.js_Api_Loops_Async Await - Fatal编程技术网

Javascript 异步/等待不在while循环中实际等待

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{ 返回新承诺

在项目快结束时,我意识到,对于它的最后一个组件,我别无选择,只能使用Async、wait和Promise,以便程序等待API调用完成,然后继续。尽管我已经了解到Javascript中确实没有停止或等待的功能。我试过下面的代码,它在没有while循环的情况下工作,但是有了它,它就停止工作了。我希望程序发送一个tweetapi调用几次,但我觉得sendOff函数实际上并没有等待,循环只是跳过它,因为它太快了,没有等待API调用完成。非常感谢您的任何帮助或其他方法

函数发送tweets{ 返回新承诺解析,拒绝=>{ 客户端。发布“状态/更新”、最终推文、函数错误、推文、响应{ 如果错误{ 拒绝错误; } 分解反应; }; }; } 异步函数发送{ 等待发送推文; } 而1{ var final_tweet={//Create tweet struct 状态:嗨! } 送别; 睡眠;
} 您可能已经注意到,不能在函数范围之外使用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); 
}
})()
签出:签出: