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

我正在使用一个外部 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 error

let data

{error, data} = await Service.fetchOrder()

我还可以做的一件事是将它们包装在一个try catch or if块中,但这是不必要的。


有人可以提出解决方法或任何其他模式吗?


30秒到达战场
浏览 128回答 3
3回答

慕的地6264312

变量可以通过与其声明分开的解构来分配其值,例如: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}您的( ... )表达式需要以分号开头,或者它可以用于执行上一行的函数。

慕斯709654

我会做以下事情: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}

婷婷同学_

解构变量将变量的使用限制为它们主要分配的值,因此,它们预计不会在您的代码中稍后被修改。将它们视为“使用一次并丢弃”变量。话又说回来,一个解决方案就在眼前:重命名它们。(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 时已损坏/无效比简单地跟踪同名变量的值的所有实例要好得多被改变了)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript