我正在使用 zone.js 开发一个有角度的环境,因此所有本机 es6 承诺都已被区域感知承诺覆盖。我有 2 个函数,称为 save() 和 onSaveCb()
save() 调用一个名为 validate() 的函数,该函数获取文件中已存在的任何已保存对象的错误代码,以便同步完成。
如果 hasError() 返回 true,我们从 save() 返回 Promise.reject(),否则我们向后端发送保存请求。
现在,onSaveCb()函数是一个异步/等待函数,它在save()周围有一个try-catch块。
问题:
当 Promise 被 save() 函数拒绝时,我看到控制台日志错误:
zone.js:682 未处理的 Promise 拒绝:;区域: ;任务:onClick 事件;值: 错误:
我尝试了很多方法,将函数 save 包装在一个承诺中,然后拒绝它,但我仍然看到相同的错误
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 块中明确编写错误处理时,我不确定为什么会收到此消息。这里的任何帮助都会有帮助
您可以导入本机 es6 Promise 并使用它:
const Promise = require('es6-promise').Promise;
或
import {Promise} from 'es6-promise;
我向 zone.js 开发人员报告了同样的问题 https://github.com/angular/zone.js/issues/954。他们回答说他们无法复制它。