5月30日 10:11
Promise 链式调用是怎么工作的?
Promise 链式调用的核心是:每次调用 .then() 都会返回一个新的 Promise,后一个 .then() 接收前一个回调的返回值。返回普通值就直接传下去;返回 Promise 就等待它 settled;抛错或返回 rejected Promise,错误会沿链向后冒泡,直到被 .catch() 捕获。
追问
then 里返回普通值和 Promise 有什么区别?
返回普通值时,下一个 then 立即拿到这个值;返回 Promise 时,下一个 then 要等它完成后再执行。
then 里不 return 会怎样?
等于返回 undefined,所以下一个 then 收到的就是 undefined。很多链式调用断数据,问题都出在这里。
catch 后面的 then 还会执行吗?
会。catch 如果返回正常值,链会恢复为 fulfilled;如果继续 throw,后面仍然走 rejected 分支。
async/await 和链式调用是什么关系?
async/await 本质是 Promise 的语法糖,适合写顺序流程;链式调用适合短管道或函数组合。
写段代码
javascriptPromise.resolve(1) .then(v => v + 1) .then(v => Promise.resolve(v * 2)) .then(v => { throw new Error('bad') }) .catch(() => 'fallback') .then(console.log);