【发布时间】:2017-12-18 20:16:22
【问题描述】:
前言:我是 C++ 背景的新手。
我正在编写一个使用公共 npm 库来请求几组数据的 NodeJS 应用程序。数据源速率限制请求,在一些极端情况下会达到这些速率限制。当达到这些限制时,API 只会在处理更多请求之前返回“Rate Limit Exceeded”几秒钟。
当我收到数据时,我尝试使用.map() 解析它。但是,当超过速率限制时,整个应用程序就会崩溃,因为map() 仅适用于数组,并且“超出速率限制”消息只是一个简单的对象。
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() 将是一个很好的候选者,但我不明白如何让它递归地工作。本质上,我希望它每五秒重新请求一次数据,直到数据被正确处理。
TL;DR:我希望一个函数使用setTimeout() 递归调用自身,直到它正确接收数据;或者如果有更好的方法来实现这一点,我会全力以赴。
【问题讨论】:
标签: javascript node.js