为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JS 中将以前的数据与 .catch 一起使用?

如何在 JS 中将以前的数据与 .catch 一起使用?

回首忆惘然 2022-10-13 16:26:38
await populartimes(markers[i].placeID)     .then(out => {temp = 'Currently ' + out.now.currently + ' full.'})     .catch(out => {temp = 'Live data is not currently available. Historically, ' + markers[i].name + ' would be ' + out.now.usually + ' full.'})     .catch(out => {temp = 'There is currently no data available.'});我正在尝试使我的第一个 .catch 语句再次使用第一个返回的数据,除了这次检查另一个变量(now.通常而不是 now.currently 在 .then 语句中检查)。我该怎么做呢?我已经写了这个,但我很确定传递给第一个 .catch 的输出只是来自 .then 的错误语句。蒂亚!
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

不幸的是,在抛出错误后,promise 不会对数据值进行curry。您已经在使用一个临时变量,为什么不使用两个呢?:


var temp;

var out!: any;

await populartimes(markers[i].placeID)

    .then(value => {

        out = value;

        temp = 'Currently ' + out.now.currently + ' full.';

    })

    .catch(() => {

        temp = 'Live data is not currently available. Historically, ' + markers[i].name + ' would be ' + out.now.usually + ' full.';

    })

    .catch(() => {

        temp = 'There is currently no data available.';

    });

但是,对于将 promise 处理与 await 语句混合使用,我会持谨慎态度。如果populartimes是异步函数,您的代码将按预期工作,但是如果它是返回承诺的普通函数,则您的代码将不会处理抛出错误的情况(返回承诺的函数可以拒绝承诺或抛出错误)。


仅使用await,try/catch您的代码将相当于:


var temp;

try {

    var out = await populartimes(markers[i].placeID);

    try {

        temp = 'Currently ' + out.now.currently + ' full.';

    } catch {

        temp = 'Live data is not currently available. Historically, ' + markers[i].name + ' would be ' + out.now.usually + ' full.';

    }

} catch {

    temp = 'There is currently no data available.';

}


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信