我是否需要为失败的异步提取创建Promise对象?

时间:2018-02-12 14:40:34

标签: javascript asynchronous promise

我正在使用async await来呼叫fetch,但我不清楚如何取消结果,以及如果取指失败则返回什么。 (例如,因为网址不正确)。

async loadJSON(url) {
  try {
      let res = await fetch(url)
      return res.json()
  } 
  catch (err) {
      // do I need to create a new promise here and reject it?
      // or can I just return false?
      return // erm...
  }
}

// calling the function, preferably without using try catch here
let result = await loadJSON("bla.php")

修改

我希望我的所有提取和错误处理代码都在loadJSON内,因此我不需要在应用程序周围散布try catch

1 个答案:

答案 0 :(得分:0)

我会这样写:

function loadJson(url) {
  return fetch(url)
  .then(res => res.json())
  .then(data => ({ isSuccess: true, data }))
  .catch(error => ({ isSuccess: false, error }))
}

然后:

let result = await loadJson("bla.php")

然后:

if (result.isSuccess) {
  // result.data
} else {
  // result.error 
}

或者:

return result.isSuccess ? result.data : result.error