JavaScript中的主导承诺:链,承诺和错误处理
#javascript #node #api #promises

介绍

这是我们的最后一篇文章s rie ecmascript 6(我可以在这里听到aahhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)。在第二部分中,我们将在使用诺言时谈论一些承诺链,使用.then()执行诺言和金色尖端。我们走吗?!

承诺

Promise.all()函数允许您同时执行 Promise母亲 并返回 当他们解决所有问题时。这是您需要执行徒劳的异步任务的时候,您想在完成时要继续执行。

const promise1 = new Promise((resolve) => {
  setTimeout(() => {
    resolve('Promise 1 resolved');
  }, 100);
});

const promise2 = new Promise((resolve) => {
  setTimeout(() => {
    resolve('Promise 2 resolved');
  }, 200);
});

Promise.all([promise1, promise2])
  .then((results) => {
    console.log(results);
  });

// Result: ["Promise 1 resolved", "Promise 2 resolved"]

值得注意的是,如果过去的任何承诺被拒绝,它是异步的,无论是否解决了其他诺言,它都会被拒绝的诺言的价值拒绝。

const promise1 = new Promise((resolve) => {
  setTimeout(() => {
    resolve('Promise 1 resolved');
  }, 100);
});

let promise2 = Promise.resolve("Promise 2 rejected");

Promise.all([promise1, promise2])
  .then((results) => {
    console.log(results);
  }).catch(e=>{
    console.log(e)
  });

// Result: Promise 2 rejected

承诺链

承诺链使您可以按照特定顺序执行 的迹象。这是您需要在另一个异步任务结束后需要执行任务的时候。为了组织此序列,我们使用Koud0操纵器。好像您来找人说:首先,您需要这样做,所以要这样做,所以要做其他事情,然后……等等。

不要忘记在.then()中写返回,如果相反,它将无法正常工作。

让我们去一个例子。假设您需要查找享受的信息,然后查找请求的信息。您可以使用承诺链执行这两个任务,希望第一个任务在执行第二个任务之前完成。

const fetchUserData = (userId) => {
  return fetch(`https://api.example.com/users/${userId}`)
    .then(response => response.json());
};

const fetchUserOrders = (userId) => {
  return fetch(`https://api.example.com/users/${userId}/orders`)
    .then(response => response.json());
};

fetchUserData(1)
  .then(user => {
    console.log('Dados do usuário:', user);
    return fetchUserOrders(user.id);
  })
  .then(orders => {
    console.log('Pedidos do usuário:', orders);
  })
  .catch(error => {
    console.error('Ocorreu um erro:', error);
  });

我们的输出将是:

Dados do usuário: 
user: {
    // informações do usuário
}

Pedidos do usuário: 
orders: [
    {
        // informações do pedido 1
    },
    {
        // informações do pedido 2
    }
]

Erro处理

黄金法则是:负责并正确处理错误。想象以下以下内容:

function makeRequest() {
  try {
    fetch('foo')
      .then(response => {
        const result = JSON.parse(response);
        console.log(result);
      })
  } catch (error) {
    console.log(error);
  }
}
如果Koud6失败,

try/catch将无法处理错误。这发生在承诺中。我们必须致电.catch才能处理此错误:

function makeRequest() {
  try {
    fetch('foo')
      .then(response => {
        const result = JSON.parse(response);
        console.log(result);
      })
      .catch(error => {
        console.log(error);
      });
  } catch (error) {
    console.log(error);
  }
}

最后处理者

我们有一些叫做最后处理程序的东西,如果我们的诺言得到了解决或拒绝,则称为独立。假设下面的承诺被拒绝:

fetch('foo')
    .then(() => {
        console.log("Consulta realizada com sucesso!");
    })
    .catch(() => {
        console.log("Erro ao consumir dados da API");
    })
    .finally(()=>{
      console.log("Fim da requisição!")
    })

我们的输出将是:

"Erro ao consumir dados da API"
"Fim da requisição!"

包括£o

好人,这是我们对Ecmascript 6的痛苦的终结。我们结束了这个sa rie,带来了有关承诺的更多信息。我们验证了Promise.all的操作,这使我们能够同时执行最后的承诺。我们还看到了使用承诺链条以特定顺序执行亚语任务的迹象的可能性。此外,我们以正确的方式处理了承诺错误的处理。最后,我们最后谈论了,如果我们的诺言得到解决或拒绝,这使我们能够独立执行独立的事情。我如何看待这是Rie?有什么建议么?我们在接下来的!

中彼此见面

了解更多