我使用npm finance来获取股票数据。当我输入一个不存在的股票符号时,我想捕捉错误。
const yahooFinance = require('yahoo-finance');
async function stockData() {
try {
let data = await yahooFinance.historical({symbol: "SIJGAOWSFA", from: 2020-08-23, to: 2021-08-23});
} catch (error) {
console.error(error)
}
}
stockData();但是,它似乎不是一个典型的获取错误。根本没被抓到。我的意思是,下面看到的错误没有通过console.error(error)登录到控制台。更确切地说,这个文件范围之外的内容是记录错误。当发生错误时,不会执行catch中的任何操作。

我计划在for循环中使用它,因此希望捕获错误,这样就可以避免执行以下任何函数。
发布于 2022-08-27 13:30:06
一位合作者说表示:
这是来自一个已经开始工作并停止工作的现有项目,还是一个新的项目? 如果前者-一切都还好的话。(非常)雅虎偶尔会有一些问题被困在自己的缓存中,可能也与DNS有关。我建议清除您的DNS缓存,并尝试查询不同的数据,以确定这是否有效。 如果是后者(新项目),则可能是您正在查询的数据。尝试查询不同的数据,看看它是否有效。通常,如果有什么问题,雅虎会抛出一个特定的错误,但可能是这样。
如果这两种方法都不起作用,但您仍然需要捕获这类错误,给出了源代码,它所做的是:
if (!crumb) {
console.warn('root.Api.main context.dispatcher.stores.CrumbStore.crumb ' +
'structure no longer exists, please open an issue.');然后继续正常运行(不抛出),并最终返回一个空数组。
如果您确信结果应该包含至少一个项,则可以检查它是否为空,如果为空,则输入错误状态。
否则,如果您不知道数组是否应该包含值,则另一个选项是覆盖console.warn,以便您可以检测何时将确切的字符串传递给它。
另一种选择是分叉库,以便它(适当地)在找不到时抛出错误,而不是继续并返回空数组,从而使空的成功结果与错误的空结果难以区分。更改
if (!crumb) {
console.warn('root.Api.main context.dispatcher.stores.CrumbStore.crumb ' +
'structure no longer exists, please open an issue.');至
if (!crumb) {
throw new Error('root.Api.main context.dispatcher.stores.CrumbStore.crumb ' +
'structure no longer exists, please open an issue.');然后您就可以在调用.historical时捕捉到它。
https://stackoverflow.com/questions/73511275
复制相似问题