apicloud经常涉及到异步回调问题,例如当我们需要在函数中异步去请求一些接口时,如果不设置异步等待,你会发现函数执行完毕了,异步回调的参数才陆续返回,导致函数渲染出的数据都是一些空数据。
早期的解决方案是将后继的代码写入异步接口的回调函数中,但如若遇到需要循环调取异步接口的情况该如何解决。
当然目前大多ajax都有提供async属性,设置为false时允许ajax为同步请求。其实原理类似。
接下来介绍一下由async、await、Promise组合实现的异步等待。
await 操作符用于等待一个 Promise 对象。它只能在异步函数 async function 中使用。
举个栗子:
function resolve5200(info) { return new Promise(resolve => { setTimeout(() => { resolve(info); }, 5200); }) } async function smile() { let you = await resolve5200('love you'); console.log(you); }
上述例子中 resolve520 函数中停留了5.2s:
如果是普通的函数,则console.log中会返回 '' 为空;
但我们使用了异步等待,则you会等待5.2s至异步回调结束后获取对应的数据,再进行console.log,所以得出的结果为'love you'。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com