js同步 Promise 请求
首先了解一下 Promise
Promise有三种状态:Pending(等待状态)、Fulfilled(完成状态)和Rejected(拒绝状态)。Promise对象只能从Pending状态转移到Fulfilled状态或Rejected状态,并且只会转换一次。
下面是一个简单的Promise使用示例:
function myAsyncFunction() { return new Promise(function(resolve, reject) { // 异步操作 if (/* 操作成功 */) { resolve("操作成功"); } else { reject("操作失败"); } }); } myAsyncFunction() .then(function(result) { console.log(result); // 输出 "操作成功" }) .catch(function(error) { console.log(error); // 输出 "操作失败" });
示例,要求先执行test1 方法后,在执行test2
没有同步:
<script type="text/javascript"> function test1(){ setTimeout(function(){ console.log('test1'); },1000); } function test2(){ console.log('test2'); } function run(){ test1(); test2(); } run(); </script>
结果:先输出了test2 在输出了test1
改造成同步:
<script type="text/javascript"> function test1(){ return new Promise(resolve => { setTimeout(function(){ console.log('test1'); resolve('test1'); },1000); }); } function test2(){ console.log('test2'); } async function run(){ await test1(); test2(); } run(); </script>
结果:先输出了test1 在输出了test2
使用方法:将test1改成 Promise 对象,在调用时的父函使用 async 同步,子函数中的Promise 对象函数 前加 await