Tôi đang sử dụng Oboe.js để phân tích một tập tin JSON thực sự thực sự lớnUnhandled lời hứa từ chối trong những lời hứa không đồng bộ
const promises = [];
oboe('http://domain/my-file.js')
.node('items.*', item => {
// parseItem() returns a rejected Promise because of invalid JSON items
promises.push(parseItem(item));
})
.done(() => {
Promise.all(promises).then(() => {
doSomething();
});
})
Nhưng giao diện điều khiển trình duyệt tôi bị tràn ngập Uncaught (in promise)
. Điều tương tự cũng xảy ra nếu quý vị viết lời hứa trong một setTimeout()
như
const promises = [];
setTimeout(() => {
promises.push(Promise.reject());
}, 500);
// some time in the future
Promise.all(promises);
Điều thực sự lạ: trình duyệt đại hành xử khác. Trong Firefox Developer Edition mọi thứ hoạt động mà không có thông báo lỗi và trong Chrome, tôi bị tràn ngập với Uncaught (in promise)
. Trong Chrome, bạn sẽ nhận được tin nhắn ngay lập tức nếu bạn viết Promise.reject();
mà không bị bắt. Trong Firefox và Safari không có gì xảy ra.
Vậy giải pháp cho điều này là gì? Bỏ qua tin nhắn? Tôi có nghĩa là nếu hành vi này thực sự là trong spec hứa hẹn chính thức sau đó hứa hẹn trong mã không đồng bộ không thực sự có ý nghĩa đối với tôi.
Hiện tại có hai trại của những người liên quan đến lời hứa es6. Một trại (nhà phát triển chrome bao gồm) xem xét cách bạn đang sử dụng lời hứa là lạm dụng. Hành vi bạn đang trải qua không có trong đặc tả cho lời hứa mặc dù có nhiều đề xuất cho nó vì trại khác tiếp tục đẩy lùi nói rằng các trường hợp sử dụng như trường hợp của bạn có liên quan. Thật không may, một số trình duyệt được thêm vào từ chối lời hứa từ chối đăng nhập bất chấp sự thiếu thông số kỹ thuật và bất chấp việc đẩy lùi nó. –
@MicahZoltu công bằng, các trại được chia ngay cả trong số các nhà phát triển Chrome. –
@MicahZoltu cảm ơn bạn đã làm rõ. Tại thời điểm này nó thực sự khó hiểu mà thực hiện sẽ là một trong những quyền. – LongFlick