一、示例代码
<html> <head></head> <body> <script src="jquery.js"></script> <script> const login = async function(){ var a = await new Promise((resolve, reject) => { $.get("", function(res){ resolve(res); }, 'json'); }); console.log(a); var b = await test2(); return b; } function test2(){ return 'test2'; } login().then(res => { console.log(res); }); </script> </body> </html>
二、promise
Promise 是承诺的意思,承诺它过一段时间会给你一个结果。Promise 是一种解决异步编程的方案,相比回调函数和事件更合理和更强大。从语法上讲,promise 是一个对象,从它可以获取异步操作的消息;
promise 有三种状态:pending 初始状态也叫等待状态,fulfiled成功状态,rejected 失败状态;状态一旦改变,就不会再变。创造 promise实例后,它会立即执行。需要注意,promise 的状态是不可逆的,一旦状态由 pending 变为 fulfiled 或者reject 状态,意味着已经产生了结果,同样,转为成功状态会有成功的结果,转为失败状态会返回失败的原因。
promise 作为构造函数,接收两个参数,分别是成功和失败的回调函数。
function sleep(second) { return new Promise((resolve, reject) => { setTimeout(() => resolve(), second * 1000); }); } sleep(3) .then(() => { console.log("开始执行"); return sleep(3); }) .then(() => { console.log("第二次执行"); return sleep(3); }) .then(() => { console.log("第三次执行"); });
then 捕获resolve回调
catch 捕获reject状态的回调
p.then((data) => { console.log("resolved", data); }).catch((err) => { console.log("rejected", err); });
三、async
async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。使用如下:
async function fun() { console.log(1); return 1; } fun().then(val => { console.log(val) // 1,1 })
四、await
await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;如果不是Promise对象:把这个非promise的东西当做await表达式的结果。使用如下:
async function fun() { let a = await new Promise((resolve, reject) => { setTimeout(function () { resolve('setTimeout promise') }, 3000) }) let b = await "表达式"; let c = await function () { return '函数表达式' }() console.log(a, b, c) } fun(); // 3秒后输出:"setTimeout promise" "表达式" "函数表达式"
标签:resolve,console,log,await,promise,async From: https://www.cnblogs.com/yang-2018/p/17593826.html