ES6-异步变同步async
ES2017 标准引入了 async 函数,使得异步操作变得更加方便 async函数可以==将异步操作变为同步操作==
问题代码
function printf(){
setTimeout(() => {
console.log("定时器");
}, 1000);
console.log("hello");
}
printf();
// 打印结果是:
// hello
// 定时器
setTimeout()
是异步函数- 无论当时有没有执行结果, 均会跳过, 执行下一条
异步优化async await
var timeout = ms => {
return new Promise((resolve) => {
setTimeout(resolve, ms);
})
}
var asyncprintf = async (value, ms) => {
await timeout(ms);
console.log(value);
}
asyncprintf("hello world", 1000);
async
修饰后的 函数, 可利用关键字await
等待, 知道完成并返回后, 执行下方操作async
会直接读取promise
对象的异步返回内容
应用实例
function ajax(){
return new Promise((resolve, reject) => {
/* $. 使用的 `jquery`网络请求方案, 需要Js库引入 */
/* 这里默认已引入, 之后再学习补充 */
$.getJSON(url, result => {
resolve(result);
}, error => {
reject(error);
})
});
}
var getinfo = async () => {
let ids = await ajax("http://iwenwiki.com/api/generator/list.php")
let names = await ajax("http://iwenwiki.com/api/generator/id.php?id="+ids[0])
let infos = await ajax("http://iwenwiki.com/api/generator/name.php?name=" + names.name)
console.log(infos);
}