ES2020 novos recursos

Saber Promise.all tem a capacidade de executar tarefas assíncronas simultâneas. Mas seu maior problema é que, se uma dessas anormalidades tarefas (rejeitar), todas as tarefas irá travar, Promise diretamente para o estado de rejeição.

Imagine este cenário: Sua página tem três regiões, correspondentes aos três dados de interface independentes, concorrente uso Promise.all a três interfaces, um serviço de interface se qualquer um o estado anormal é rejeitar, o que pode levar a três páginas todos os dados regionais não pode ser processado porque rejeitar qualquer retirada entrará na captura, obviamente, isso é inaceitável, como segue:

Promise.all([
  Promise.reject({code: 500, msg: '服务异常'}),
  Promise.resolve({ code: 200, list: []}),
  Promise.resolve({code: 200, list: []})
])
.then((ret) => {
  // 如果其中一个任务是 reject,则不会执行到这个回调。
  console.log(res)
  RenderContent(ret);
})
.catch((error) => {
  // 本例中会执行到这个回调
  console.log(error)
  // error: {code: 500, msg: "服务异常"}
})

vantagem Promise.allSettled
precisamos de um mecanismo, se tarefas simultâneas, seja uma tarefa normal ou anormal, retorna o status correspondente (cumprida ou rejeitado) e resultados (devido ao valor do negócio ou rejeitar razão), em seguida, passe interior de filtro no lógica de negócios para filtrar o resultado desejado, a acessibilidade deste negócio será capaz de maximizar a proteção do estado actual e Promise.allSettled é para resolver este problema.

Promise.allSettled([
  Promise.reject({code: 500, msg: '服务异常'}),
  Promise.resolve({ code: 200, list: []}),
  Promise.resolve({code: 200, list: []})
])
.then((ret) => {
  /*
      0: {status: "rejected", reason: {...}}
      1: {status: "fulfilled", value: {...}}
      2: {status: "fulfilled", value: {...}}
  */
  // 过滤掉 rejected 状态,尽可能多的保证页面区域数据渲染
  RenderContent(ret.filter((el) => {
      console.log(el)
      return el.status !== 'rejected';
  }));
});

ES2020 oferece uma maneira fácil: String.prototype.matchAll, que retorna um iterador

var str = '<text>JS</text><text>正则</text>';
var allMatchs = str.matchAll(/<\w+>(.*?)<\/\w+>/g);

for (const match of allMatchs) {
  console.log(match);
}
/*
第一次迭代返回:
[
    "<text>JS</text>",
    "JS",
    index: 0,
    input: "<text>JS</text><text>正则</text>",
    groups: undefined
]

第二次迭代返回:
[
    "<text>正则</text>",
    "正则",
    index: 15,
    input: "<text>JS</text><text>正则</text>",
    groups: undefined
]
*/
Publicado 155 artigos originais · ganhou elogios 57 · vê 60000 +

Acho que você gosta

Origin blog.csdn.net/weixin_43764814/article/details/104463555
Recomendado
Clasificación