zone.js承诺即使有catch块也将返回未处理的Promise Rejection错误

时间:2019-05-15 01:18:35

标签: angular promise zone

我正在使用zone.js在一个有角度的环境中工作,因此所有本机es6 Promise已被区域感知Promise覆盖。我有2个名为 save() onSaveCb()

的函数

save()调用一个名为 validate()的函数,该函数获取文件中已经存在的任何已保存对象的错误代码,因此可以同步完成。

如果hasError()返回true,则从save()返回 Promise.reject(),否则我们将保存请求发送到后端。

现在, onSaveCb()函数是一个异步/等待函数,它在 save()周围具有try-catch块。

问题:

save()函数拒绝Promise时,我看到控制台日志错误:

zone.js:682未处理的承诺拒绝:;区域:任务:onClick事件;值:错误:

我尝试了很多方法,将函数包装在一个Promise中,然后拒绝它,但是我仍然看到相同的错误

function save() {
   let errorCode = this.validate(); // This is a sync call
   if(errorCode !== 0) { return Promise.reject(errorCode);}
   return https(url).then(function() {return true});
} 

function async onSaveCb() {
   try{
     let response = await this.save();
     alertUI(response);
     } catch (response) {
       alertUI(response);
     }
}

当在catch块中明确编写错误处理时,我不确定为什么会收到此消息。这里的任何帮助都会有所帮助

1 个答案:

答案 0 :(得分:0)

您可以导入本机es6 Promise并改为使用它:

const Promise = require('es6-promise').Promise;

import {Promise} from 'es6-promise;