async 是 ES7 才有的与异步操作有关的关键字。

async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。

async function helloAsync(){
return "helloAsync";
} console.log(helloAsync()) // Promise {<resolved>: "helloAsync"} helloAsync().then(v=>{
console.log(v); // helloAsync
})

async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。

await 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。

function testAwait(){
return new Promise((resolve) => {
setTimeout(function(){
console.log("testAwait");
resolve();
}, 1000);
});
} async function helloAsync(){
await testAwait();
console.log("helloAsync");
}
helloAsync();

使用async和await配合,可以不使用then实现函数的同步执行。

await返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。

如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。

function testAwait (x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
} async function helloAsync() {
var x = await testAwait ("hello world");
console.log(x);
}
helloAsync ();
// hello world

正常情况下,await 命令后面是一个 Promise 对象,它也可以跟其他值,如字符串,布尔值,数值以及普通函数。

function testAwait(){
console.log("testAwait");
}
async function helloAsync(){
await testAwait();
console.log("helloAsync");
}
helloAsync();
// testAwait
// helloAsync

await针对所跟不同表达式的处理方式:

Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。

非 Promise 对象:直接返回对应的值。

在React Native项目中的使用示例:

async login(){
this.setState({
loading:true
})
let { username, pwd } = this.state
// console.log(username,pwd)
AsyncStorage.setItem('username', username)
AsyncStorage.setItem('pwd', pwd) let that = this // 发起网络请求
await fetch(base +'/appLogin/login',{
method: 'POST',
body:JSON.stringify({
name: username,
pwd: md5(pwd),
}),
headers:{
'Accept': 'application/json',
'Content-Type': 'application/json'
},
}).then(response => response.json()).then((data) => {
this.setState({
loading:false
})
console.log("res",data)
if(data.code === 200){
let mydata = data.data
 //操作mydata
}).catch((err)=>{
console.log(err)
})
}

该程序片段使用fetch来请求接口,等到拿到数据后先使用

fetch().then(response => response.json()).then((data) => {})

进行解析,得到数据。

最新文章

  1. C++Promise函数
  2. Recurrent Neural Network(循环神经网络)
  3. 环境监测小助手V1.1的Windows版
  4. 用JQuery中的Ajax方法获取web service等后台程序中的方法
  5. SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科
  6. HDU 5095 Linearization of the kernel functions in SVM(模拟)
  7. HTML5游戏开发引擎Pixi.js完全入门手册(一)框架简介及框架结构分析,作者思路剖析
  8. PreferenceActivity详解
  9. C# 计算地图上某个坐标点的到多边形各边的距离
  10. nodejs搭建web项目
  11. 如何解决代码中if…else 过多的问题
  12. raise
  13. 分享一个基于ssm框架下的webService接口开发
  14. 同步下的资源互斥:停运保护(Run-Down Protection)机制
  15. SQL Server 中的一些概念
  16. [BigData - Hadoop - YARN] YARN:下一代 Hadoop 计算平台
  17. pic_scrapy_python
  18. jq回车触发绑定点击事件
  19. POJ 1191棋盘分割问题
  20. React JSX基本语法规则

热门文章

  1. linux服务器常用操作和命令
  2. 《高性能MySQL》之EXPLAIN
  3. 049、Java中使用switch判断,不加入break时的操作
  4. SpringMVC之ModelAndView的用法
  5. scala安装教程及简单配置
  6. 【转载】redis.windows.conf 参数说明
  7. SQL优化工具 - SQL Server Profiler与数据库引擎优化顾问
  8. spark集群硬件建议
  9. Maven与nexus关系
  10. 长篇Essay写作凑字数的小技巧