下面一个简单的例子,但愿可以解决问题:
javascript
咱们将看到两次执行相同的功能。首先使用Promise,而后第二次使用Async / Await
java
// Promise
function getJSON(){
// 建立一个Promise
return new Promise( function(resolve) {
axios.get('https://tutorialzine.com/misc/files/example.json')
.then( function(json) {
// 请求的数据用resolve返回结果
resolve(json);
});
});
}
// Async/Await
// async关键字将自动建立并返回 Promise
async function getJSONAsync(){
// wait关键字使咱们没必要编写.then()块
let json = await axios.get('https://tutorialzine.com/misc/files/example.json');
// 请求的结果赋值给json变量并返回
return json;
}复制代码
getJSONAsync()。then(function(result) {
//用result作一些事情。
});复制代码
不会。使用Async / Await时,咱们仍在使用Promise。甚至有一些用例Async / Await没有削减它,咱们不得不回到Promises寻求帮助。一个这样的场景是当咱们须要进行多个独立的异步调用并等待全部这些调用完成时。ios
async function getABC() {
let A = await getValueA(); // getValueA须要2秒才能完成
let B = await getValueB(); // etValueB须要4秒才能完成
let C = await getValueC(); // getValueC须要3秒才能完成
return A*B*C;
}复制代码
async function getABC() {
// Promise.all() 容许同时发送全部请求。
let results = await Promise.all([ getValueA, getValueB, getValueC ]);
return results.reduce((total,value) => total * value);
}复制代码
async function doSomethingAsync(){
try {
// 此异步调用可能会失败。
let result = await someAsyncCall();
}
catch(error) {
// 若是失败,将在这里捕获错误
}
}复制代码
catch子句将处理由等待的异步调用或咱们可能在try块内写入的任何其余失败代码引起的错误。
json
若是状况须要,咱们还能够在执行异步函数时捕获错误。由于全部异步函数都返回Promise,因此在调用它们时咱们能够简单地包含一个.catch()事件处理程序。
axios
// 没有try / catch块的异步函数
async function doSomethingAsync(){
// 此异步调用可能会失败
let result = await someAsyncCall();
return result;
}
// 在调用该函数捕获错误。
doSomethingAsync().
.then(successHandler)
.catch(errorHandler);复制代码
选择你喜欢的错误处理方法并坚持下去是很重要的。同时使用try/catch和.catch()极可能会致使问题。浏览器
异步/等待浏览器支持bash
参考文献:tutorialzine.com/2017/07/jav…服务器