1

考虑到在 Javascript中使用 try/catch 块内的对象解构时,您正在为变量赋值。我们稍后将在函数中需要这些变量。

目前,我将整个作业用括号括起来:


async function myFunction() {
  let query, variables;
  try {
    ({ query, variables } = await giveMeVariables()) // Here...
  } catch (err) {
    console.log("An error ocurred");
  }

  console.log("QUERY", query);
  console.log("VARIABLES", variables);
}

function giveMeVariables () {
  return new Promise((resolve, reject) => {
    resolve({ query: "hi", variables: "there" });
  });
}


查看MDN:“使用没有声明的对象文字解构赋值时,赋值语句周围的括号 ( ... ) 是必需的。” 这是处理带有解构的 try/catch 块的首选方法,还是有更好的方法?

另外,你会如何在 Typescript 中输入这个?您是否必须将初始变量键入为未定义/您的预期结果?

4

2 回答 2

2

目前你没有从myFunction. 我会立即从该函数返回数据await,然后记录它。

function giveMeVariables() {
  return new Promise((resolve, reject) => {
    resolve({ query: "hi", variables: "there" });
  });
}

async function myFunction() {
  try {
    return giveMeVariables();
  } catch (err) {
    console.log("An error ocurred");
  }
}

(async() => {
  const { query, variables } = await myFunction();
  console.log("QUERY", query);
  console.log("VARIABLES", variables);
})();

于 2021-09-03T16:46:41.630 回答
-2

这是不真实的,您可以使用 var,但这是一种不好的做法,因此:

let query, variables;
try {
  const vars = giveMeVariables()
  query = vars.query
  variables = vars.variables
} catch (err) {
  console.log("An error occured");
}

console.log("QUERY", query);
console.log("VARIABLES", variables);
于 2021-09-03T16:31:05.770 回答