Promise then catch
title: then
和catch
的顺序很重要
type: 提示
language: javascript
tags: [function,promise]
cover: blue-sunrise
excerpt: 在JavaScript的Promise中,错误地使用then
和catch
方法的顺序可能会导致问题。下面是一个简短的介绍。
dateModified: 2021-06-12
许多与Promise相关的问题都源于错误的使用Promise.prototype.then()
和Promise.prototype.catch()
方法的顺序。这些方法链式调用的顺序会导致完全不同的行为。让我们来看一个非常简单的例子:
const myPromise = () => Promise.reject('Oops!');
const logger = data => console.log(data);
const identity = data => data;
myPromise().catch(identity).then(logger); // 输出:Oops!
myPromise().then(logger).catch(identity); // 什么都不输出
从这个例子中可以看出,交换catch()
和then()
方法会导致完全不同的行为,尽管Promise的结果是相同的。这是因为每个链式调用的方法本身都会返回一个Promise。这意味着第一个方法会将其结果传递给第二个方法,第二个方法传递给第三个方法,依此类推。虽然在这个例子中这一点似乎很明显,但很多时候人们会忽视这一点,从而导致难以调试的问题。尤其是当Promise链很长且复杂时,这一点尤为重要。
因此,下次在处理Promise时,请尝试从Promise链的角度思考then()
和catch()
方法,并记住顺序很重要!