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

在销毁对象时管理变量范围

在销毁对象时管理变量范围

30秒到达战场 2022-05-22 18:09:30
我正在使用一个外部 API,它为每个 API 调用返回一个对象,如下所示。为了成功的共鸣。{ error: null, data: { //response fields }}对于不成功的响应。{ error: { //error fields } data: null}我在我的控制器中使用这些 API,如下所示。const verifyPayment = async function() {  const {error, data} = await Service.fetchOrder()  if(error)      return false  const {error, data} = await Service.verifyPayment()  if(error)     return false  return true}我知道我不能声明或覆盖const同一范围内的变量。我也不能做同样的事情,let我先尝试声明error,data然后尝试覆盖,但它也不起作用。let errorlet data{error, data} = await Service.fetchOrder()我还可以做的一件事是将它们包装在一个try catch or if块中,但这是不必要的。有人可以提出解决方法或任何其他模式吗?
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

变量可以通过与其声明分开的解构来分配其值,例如:


let error, data;

({error, data} = {error: null, data: 1});

console.log(error, data);


({error, data} = {error: 1, data: null});

console.log(error, data);


来自文档的注释:


注意:( ... )当使用没有声明的对象文字解构赋值时,赋值语句周围的括号是必需的。


{a, b} = {a: 1, b: 2}不是有效的独立语法,因为{a, b}左侧的 被视为块而不是对象文字。


但是,({a, b} = {a: 1, b: 2})是有效的,原样const {a, b} = {a: 1, b: 2}


您的( ... )表达式需要以分号开头,或者它可以用于执行上一行的函数。


查看完整回答
反对 回复 2022-05-22
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我会做以下事情:


const verifyPayment = async function() {

    let response;

    response = await Service.fetchOrder()

    if(response.error)

        return false

    response = await Service.verifyPayment()

    if(response.error)

       return false

    return true

}


查看完整回答
反对 回复 2022-05-22
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

解构变量将变量的使用限制为它们主要分配的值,因此,它们预计不会在您的代码中稍后被修改。


将它们视为“使用一次并丢弃”变量。


话又说回来,一个解决方案就在眼前:重命名它们。


(1) 我们如何做到这一点?


const { data: data1, error: error1  } = await Service.fetchOrder();


if (error1) return false;


const { data: data2, error: error2 } = await Service.verifyOrder();


if (error2) return false;

这样,您的代码将保持优雅的格式,并且在调用失败的情况下也有助于调试(知道数据在被命名为 data1 时已损坏/无效比简单地跟踪同名变量的值的所有实例要好得多被改变了)。


查看完整回答
反对 回复 2022-05-22
  • 3 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号