如何在深层嵌套的承诺履行中为异常创建顶级处理程序?

时间:2017-06-01 23:29:45

标签: javascript typescript exception promise

我无法找到一种方法来捕捉最高级别的承诺履行链中可能出现的异常。以下是我编写的示例代码和两种不同的方法,两种方法都不起作用:

import * as Q from 'q';

function main()
   {
   console.log("In main now.");
   One().then(function()
      {
      console.log("One's promise fulfilled.");
      })
   .catch(function()
      {
      console.log("One's promise rejected.");
      })
   }

function One() : Q.Promise<void>
   {
   var deferred = Q.defer<void>();
   Two().then(function()
      {
      console.log("Two's promise fulfilled.");
      this.foo();
      deferred.resolve();
      })
   return deferred.promise;
   }

function Two() : Q.Promise<void>
   {
   var deferred = Q.defer<void>();
   deferred.resolve();
   return deferred.promise;
   }

main();

我尝试的替代方法是使用onReject处理程序,如下所示:

function main()
   {
   console.log("In main now.");
   One().then(function()
      {
      console.log("One's promise fulfilled.");
      },
   function()
      {
      console.log("One's promise rejected.");
      })
   }

在这两种方法中,我都无法捕获在行发生的异常:

this.foo();

换句话说,这两种方法都没有向控制台生成“One's promise rejected”输出。有没有办法在顶层捕获此类异常?

0 个答案:

没有答案