[英]JavaScript Exception Is Lost In Promise Chain
我對JavaScript Promise並不陌生,我正在嘗試在Android設備上將其實現為某些PhoneGap代碼。 我想記錄異常,看起來異常被吞沒在某處。 請參見下面的示例代碼。 由於調用不存在的函數“ thiswillfail”而引發的異常不會在任何地方顯示。 我注釋掉了不相關的代碼,並添加了代碼以強制調用AddRecord Promise。 代碼檢查記錄是否存在,如果不存在,則返回錯誤的AddRecord Promise。 我沒有使用任何第三方庫。 我究竟做錯了什么?
編輯:如果我在鏈“ DoSomethingWithRecord”中添加另一個諾言,則當期望是跳到陷阱時將調用此諾言。
function TestPromiseExceptionHandling() {
var record = null;
var CheckForRecord = function () {
return new Promise(function (resolve, reject) {
//getData(
// function (data) {
var data = "";
if (data != "") {
//record = new Record(data);
record = "existed";
resolve();
}
else return AddRecord();
// },
// function (err) {
// reject(new Error("An error occurred retrieving data, msg=" + err.message));
// });
});
};
var AddRecord = function () {
return new Promise(function (resolve, reject) {
thiswillfail();
//add record
var success = true;
record = "new";
if (success) resolve();
else reject(new Error("add record failed"));
});
};
var DoSomthingWithRecord = function () {
return new Promise(function (resolve, reject) {
alert(record);
resolve();
});
};
try {
CheckForRecord()
.then(DoSomthingWithRecord())
.catch(function (err) { alert(err.message);})
.then(function () { alert("done"); });
} catch (err) {
alert(err.message);
}}
當您這樣做時,您不能從promise構造函數返回:
else return AddRecord();
什么都不會等待AddRecord,相反,您要使用AddRecord解決,它將在解決諾言之前等待它:
else resolve(AddRecord());
但是,如果這是您的代碼,則可以只return AddRecord()
而不是始終使用promise構造函數。 Promise構造函數(新的Promise)在將非 Promise API轉換為Promise時最有用,並且不應與已承諾的API一起使用。 使用then
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.