美文网首页让前端飞
如何中断Promise的链式调用

如何中断Promise的链式调用

作者: 哼取个帅气的昵称吧 | 来源:发表于2019-03-16 21:56 被阅读8次

Promise的then用起来很方便,通过链式调用可以让代码看起来更清晰。

let p = new Promise((resolve, reject) => {
  resolve('step1');
});

p.then(data => {
  console.log(data);
  return 'step2';
}).then(data => {
  console.log(data);
  return 'step3';
}).then(data => {
  console.log(data);
  return 'step4';
}).catch(reason => {
  console.log(reason);
}).finally(() => {
  console.log('finished.');
});

对应的结果是:

"step1"
"step2"
"step3"
"finished."  /*return 'step4'后面没有继续处理了,所以不会打印*/

可是,如果我们在处理step2的时候,因为条件满足了,后面的步骤不需要执行,这时候就需要去中断后续的调用链。

方法一:通过抛出一个异常来终止

let needBreak = true;
let p = new Promise((resolve, reject) => {
  resolve('step1');
});

p.then(data => {
  console.log(data);
  return 'step2';
}).then(data => {
  console.log(data);
  if (needBreak) {
    throw "we need break";
  }
  return 'step3';
}).then(data => {
  console.log(data);
  return 'step4';
}).catch(reason => {
  console.log('got error:', reason);
}).finally(() => {
  console.log('finished.');
});

这时候的输出就成了这样:

step1
step2
got error: we need break
finished.

方法二:通过reject来中断

let needBreak = true;
let p = new Promise((resolve, reject) => {
  resolve('step1');
});

p.then(data => {
  console.log(data);
  return 'step2';
}).then(data => {
  console.log(data);
  if (needBreak) {
    return Promise.reject('break without exception.');
  }
  return 'step3';
}).then(data => {
  console.log(data);
  return 'step4';
}).catch(reason => {
  console.log(reason);
}).finally(() => {
  console.log('finished.');
});

输出结果:

step1
step2
break without exception.
finished.

相关文章

  • 如何中断Promise的链式调用

    Promise的then用起来很方便,通过链式调用可以让代码看起来更清晰。 对应的结果是: 可是,如果我们在处理s...

  • js promise图解

    链式调用 封闭promise

  • Promise方法运用

    本章涉及以下几点 如何创建一个Promise对象 参数讲解 链式调用 catch()捕捉异常 Promise.al...

  • 嵌套的promise执行顺序

    外部promise有多个then链式调用,第一个then里面执行另一个promise,也带多个then链式调用,他...

  • Promise的简单实现

    随着ES6的出现,Promise成为标准,平时使用的次数也增加。但是Promise的原理是什么,如何实现链式调用。...

  • ES6

    AJAX 异步网络请求 Promise 使用了Promise对象之后可以链式调用的方式组织代码 Promise.a...

  • Promise链式调用

    做了一个博客项目,有一个过程如下: 封装request函数(用axios发送请求),axios会返回一个promi...

  • Promise链式调用

    一、Promise对象 承诺一定会实现,更简单的处理异步请求。同时更加方便使用链式调用。缺点:Promise对象状...

  • Promise 链式调用

    Promise status状态,有三种状态pendding、resolved、rejected,状态由 pend...

  • Promise用法详解

    参考promise|深入理解 promise:promise的三种状态与链式调用 Promise对象只有三种状态 ...

网友评论

    本文标题:如何中断Promise的链式调用

    本文链接:https://www.haomeiwen.com/subject/rjdemqtx.html