簡體   English   中英

如果錯誤源很多,則拒絕承諾

[英]Rejecting Promise if many error sources

我處於有許多潛在錯誤源的情況下。 有沒有解決這個麻煩的優雅方法?

我應該如何拒絕它?

  function myFuction(hash) {
    return new Promise((resolve, reject) => {
      // this could return error
      const id = atob(hash);

      // this could return error   
      let data = firstFunction(id);

      // return error if not true
      if (data && data.id) {
        // this could return error   
        return secondFunction(data.id)
          .then(item => {

            // return error if not true
            if (item) {
              // this could return error  
              return thirdFunction(item)
                .then(payload => {
                  resolve('OK');
                });
            }
          });
      }
    });
  }

避免Promise構造函數反模式 您可以將早期回報與Promise.reject配合使用, Promise.reject可以只throw錯誤:

function myFuction(hash) {
    return Promise.resolve().then(() => {
        // this could throw error
        const id = atob(hash);
        // this could throw error   
        let data = firstFunction(id);

        // return error if not true
        if (!data || !data.id)
            return Promise.reject(new Error("…")); // alternative: throw new Error("…");

        return secondFunction(data.id);
    }).then(item => {
        // return error if not true
        if (!item)
            return Promise.reject(new Error("…")); // same here

        return thirdFunction(item);
    }).then(payload => 'OK');
}

(另外,我應用了一些flattening ,但只要您始終從promise回調中return ,也可以嵌套)

暫無
暫無

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

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