簡體   English   中英

嵌套的ES6承諾-未捕獲外部函數錯誤

[英]Nested ES6 promises - outer func error not caught

我不熟悉ES6和一系列承諾。 我的情況是,原始調用站點調用一個函數(1),然后調用另一個函數(2)。 嘗試同時具有功能2和功能1會基於成功或錯誤返回承諾。

這是一些人為的示例代碼:

function level2(data) {
  return new Promise((resolve, reject) => {
    reject('fail')
  })
}

function level1(info) {
  level2('abc').then((response) => {
    return new Promise((resolve, reject) => {
      resolve('success')
    })
  })
}

level1('thing').then((response) => {
  console.log('response2 ' + response)
}).catch(e => {
  console.log('error2 ' + e)
})

我能夠成功使用一級承諾。 但是,當涉及到對諾言的鏈接或嵌套時,我沒有正確地使用它,因此消耗諾言的最外層無法捕獲錯誤。

設置promise的正確方法是什么,以便兩個功能(級別1和2)都可以將成功或失敗返回給調用方?

在示例函數(level1)中,函數(level2)的錯誤是否會冒泡?

您需要獲得level1才能返回承諾。

 { // level2 reject: function level2(data) { return new Promise((resolve, reject) => { reject('fail inside level2') }) } function level1(info) { return level2('abc').then((response) => { return new Promise((resolve, reject) => { resolve('success') }) }) } level1('thing').then((response) => { console.log('response2 ' + response) }).catch(e => { console.log('error2 ' + e) }); } { // level1 reject: function level2(data) { return new Promise((resolve, reject) => { resolve('ok'); }) } function level1(info) { return level2('abc').then((response) => { return new Promise((resolve, reject) => { reject('fail inside level1') }) }) } level1('thing').then((response) => { console.log('response2 ' + response) }).catch(e => { console.log('error2 ' + e) }); } 

首先,您不需要這些:

 new Promise((resolve, reject) =>  reject('fail'))

有一些快捷方式:

 Promise.resolve("success")
 Promise.reject("fail");

設置promise的正確方法是什么,以便兩個功能(級別1和2)都可以將成功或失敗返回給調用方?

使用Promise.allPromise.race來統一它們,或者將其中一個允諾返回到另一個允諾中,然后使它們變平(就像您所做的那樣)。

在示例函數(level1)中,函數(level2)的錯誤是否會冒泡?

是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM