Skip to content

Promise then catch


title: thencatch的顺序很重要 type: 提示 language: javascript tags: [function,promise] cover: blue-sunrise excerpt: 在JavaScript的Promise中,错误地使用thencatch方法的顺序可能会导致问题。下面是一个简短的介绍。

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()方法,并记住顺序很重要!