then中第一个函数是成功的回调函数,第二个函数是失败的回调函数。then中一般只包含成功的处理函数,而失败的处理函数一般放在catch中。 2. 连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之后,开始下一个的操作,并带着上一步操作所返回的结果。我们可以通过创造一个 Promise 链来实现这种需求。 如果不适用Promise,则要做多重异步操作就会导致经典的回调地狱:
doSomething(function(result) { doSomethingElse(result, function(newResult) { doThirdThing(newResult, function(finalResult) { console.log('Got the final result: ' + finalResult); }, failureCallback); }, failureCallback); }, failureCallback);这会使代码的可读性大大下降。 现在,我们可以把回调绑定到返回的 Promise 上,形成一个 Promise 链:
doSomething().then(function(result) { return doSomethingElse(result); }) .then(function(newResult) { return doThirdThing(newResult); }) .then(function(finalResult) { console.log('Got the final result: ' + finalResult); }) .catch(failureCallback);这里我们在每个then中都只绑定了成功的回调函数,失败的回调统一放在catch中处理。 一般在then中会返回一个Promise对象,紧接着后面的then就作为前面返回的Promise的成功回调函数。