首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用NodeJS/ES6重试失败的尝试

使用NodeJS/ES6重试失败的尝试
EN

Stack Overflow用户
提问于 2017-12-19 04:16:22
回答 2查看 77关注 0票数 2

前言:我来自C++背景,是Javascript的新手。

数据源速率限制请求,并且在一些极端情况下,这些速率限制被击中。

当我收到数据时,我尝试使用.map()对其进行解析。然而,当超过速率限制时,整个应用程序就会崩溃,因为map()只对数组可用,而“超过速率限制”消息只是一个简单的对象。

代码语言:javascript
运行
复制
if (message.message === 'Rate limit exceeded') { //This check doesn't work btw
    console.log('There was a problem parsing data from the server: ' + err);
    return;
    }

    var items = data.map(item => ({
        time: new Date(item[0] * 1000),
        low: item[1],
        high: item[2],
        open: item[3],
        close: item[4],
        volume: Number(item[5])
    }));

    for(var i = 0; i < items.length; i++)
        dataStore.push(items[i]);

我希望一个函数通过setTimeout()递归地调用自己,直到它正确地接收数据;或者如果有更好的方法来实现这一点,我洗耳恭听。

EN

回答 2

Stack Overflow用户

发布于 2017-12-19 04:36:22

这里你能做的就是使用setInterval()并保持每隔n秒检查一次。获得数据后,可以使用clearInterval()退出setInterval()

代码语言:javascript
运行
复制
let retryAfter = 10000; //10 seconds

setInterval(function fetchData() {
  $.get('//api.jsonbin.io/b/5a3823a38aaf400a97709c43', (data) => {
  
    // Keep on retrying
    console.log(data);

    // If you get the data, just exit the setInterval
    if(data) {
      clearInterval(fetchData);
    }
  });
}(), retryAfter); 

//() brackets here is to execute the function without the first 10 sec delay
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

到目前为止,在这个例子中,我的setInterval()将只运行一次,因为它首先获得了数据。但在您的示例中,它将一直运行到您收到数据为止。

此外,我不能建议您应该如何比较您的错误消息,因为我不确定返回错误消息的API是JSON格式还是纯文本格式。这取决于如何根据响应数据类型比较错误消息。

票数 1
EN

Stack Overflow用户

发布于 2017-12-19 04:35:25

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47875781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档