2016-10-18 1 views
-3

私の仕事ではasyncを使用しています。私はajaxのrequstを送信し、受信します。asyncでロジックエラーを処理する方法は?

私はこのように書くつもりです。

const API = { 
    init() { 
    this.initIndexData(); 
    }, 

    async initIndexData() { 
    try { 
     let data = await this.getData(); 
    } catch (e) { 
     console.log(e); 
    } 
    }, 

    getData() { 
    new Promise((resolve, reject) => { 
     $.ajax({ 
     url: 'xx.json', 
     success(res) { 
      if (res.success) { 
      resolve(res); 
      } else { 
      reject(res); 
      } 
     } 
     }) 
    }); 
    } 
} 

API.init(); 

私はtry..catchとwirteコードが嫌いです。 try catchを使用せずにrejectを処理するソリューションはありますか?

何時でもいつでもreolveを使用できると思います。このような。

if (res.success) { 
    resolve(res); 
} else { 
    reject(res); 
} 
... 

let data = await this.getData(); 
if (data.success) { 
    // do sth success logic 
} else { 
    // do sth error logic 
} 

上記はtry catchなしrejectに対処するためのソリューションですが、このコードは、意味ではありません。

+1

"*私は' try..catch' *とwirteコード好きではない" を - なぜ? – Bergi

+0

@Bergiどのようなエラーが起こっているのかわからないときは、私が試してみると思います。しかし、私が書いた例では、どのようなエラーが発生しているかを見ることができるので、try ... catchを使用する必要はないと思います。 – qiuyuntao

+0

もしあなたが '!res.success'の場合だけを捕捉したいなら、多分' res'で 'resolve'して、それを処理したい場所に条件を置くべきです。あなたの約束は、ネットワーク問題、JSON構文エラー、または何か他のものがあった場合にも拒否されます(そして 'catch 'がトリガーされます)。 – Bergi

答えて

0

あなたは約束の通常の.catch methodを使用することができます。

async initIndexData() { 
    let data = await this.getData().catch(e => { 
    console.log(e); 
    }); 
}, 
async getData() { 
    const res = await $.ajax({ 
//   ^^^^^ much better than `new Promise` 
//     as it does not ignore the ajax error handler 
     url: 'xx.json', 
    }); 
    if (res.success) { 
    return res; 
    } else { 
    throw res; 
    } 
} 
関連する問題