Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在使用.catch和async Wait是否会导致问题?_Javascript_Async Await - Fatal编程技术网

Javascript 正在使用.catch和async Wait是否会导致问题?

Javascript 正在使用.catch和async Wait是否会导致问题?,javascript,async-await,Javascript,Async Await,我的问题是,使用.catch和async Wait会导致问题吗 例如: 函数f1(){ 返回新承诺((res,rej)=>{ rej(1) }) } 异步函数f2(){ wait f1().catch(ex=>{})//这就是我的意思 } f2()我想你要找的是这个 function f1(){ return new Promise((res,rej)=>{ rej(1) }) } async function f2(){ try { const respo

我的问题是,使用.catch和async Wait会导致问题吗

例如:

函数f1(){
返回新承诺((res,rej)=>{
rej(1)
})
}
异步函数f2(){
wait f1().catch(ex=>{})//这就是我的意思
}

f2()
我想你要找的是这个

function f1(){
  return new Promise((res,rej)=>{
    rej(1)
  })
}

async function f2(){
  try {
    const response = await f1();
    // use the response from f1()
  } catch(err) {
    throw new Error(err);
  }
}

f2()
类似于
async/await
的东西是一个承诺的包装器,允许您编写同步代码。否则你会看到

function f2(){
  let response;
  f1().then(res => {
    response = res
  })
  .catch(err => {
    throw Error(err)
  });
}

这取决于“问题”的含义,但以下代码:

async function f2() {
  await f1().catch(ex => { /* ... code in catch ... */ }) // this is what I mean
}
相当于:

async function f2() {
  try {
    await f1()
  } catch (ext) {
    /* ... code in catch ... */
  } // this is what I mean
}

正如您所说,使用
.catch
而不是
try catch
是很有用的,因为它可以(并非在所有情况下)使您的代码更具可读性。但是您需要始终考虑
.catch
是否是可读性的正确选择。如果您将其用于可恢复的错误处理,它会很好地工作。

为什么捕获问题会导致问题?您担心会导致什么问题?使用
.catch
没有错,但不清楚您为什么要这样做。您可以使用try/catch编写相同的代码:
try{await f1();}catch(ex){}
no它不会导致问题我希望以这种方式使用它来捕获特定错误,并在不停止整个函数的情况下对其采取正确的操作。如果我使用try-catch,代码很快就会被污染。thx回答:
在try catch块和
中抛出新错误(err)
的目的是什么?在
f1()中。然后(res=>{
如果不从
f1
返回承诺,将导致未经处理的承诺拒绝。当然。我明白你的意思。但是,此人试图理解承诺解析/拒绝与异步/等待并列的工作区别。他们显然混淆了一些语法。