<!--ES5:通过回调函数来处理异步执行的结果-->
function fn(callback){
setTimeout(()=>{
var call = "hello world";
callback(call);
}, 1000);
}
fn(function(call){
console.log(call); //hello world
});
<!--ES6新特性:Promise-->
<!--promise 用同步的写法执行异步代码-->
<!--Promise 优化了回调函数的用法,让原本需要纵向一层一层嵌套的回调函数实现了横向的调用,也就是链式调用-->
<!--Promise是同步的,它里面执行到异步任务以前都是同步执行的。当执行的异步任务的时候,就被挂起了,然后继续执行主线程Promise后面的代码。当异步任务有结果返回的时候,Promise的状态就改变啦!-->
<!--Promise 构造函数接受一个函数作为参数,函数里面有两个参数 resolve 和 reject ,其中 resolve 作为执行成功的函数, reject 作为执行失败的函数-->
function fn(resolve,reject){
setTimeout(()=>{
var call = "hello world";
resolve(call);
}, 1000);
}
let p = new Promise(fn);
p.then(function(res){
console.log(res); //hello world
})
<!--ES7新特性:async…await-->
/*
*1. async 将普通方法转为 异步并且返回 promise对象
*2. await 将异步代码转为同步结果,等着异步代码执行完才执行后面的代码
*/
<!--async 将普通方法转为 异步并且返回 promise对象-->
async function test(){
return 'goods';
}
console.log(test());//Promise {<resolved>: "goods"}
let p = test();
p.then(function(res){
console.log(res); //goods
})
<!--await 必须在异步函数中使用-->
async function test(){
return 'goods';
}
//await 必须在异步函数中使用
async function fn(){
let data = await test();
console.log(data); //goods
}
fn();
//例
async function fn1(){
return '成功';
}
async function fn2(){
console.log(1111);
let p = fn1();
p.then(function(res){
console.log(res);
});
console.log(3333);
}
fn2();
/**
输出:
1111
3333
成功
*/
async function fn1(){
return '成功';
}
async function fn2(){
console.log(1111);
// await 将异步代码转为同步结果,等着异步代码执行完才执行后面的代码
let data = await fn1();
console.log(data);
console.log(3333);
}
fn2();
/**
输出:
1111
成功
3333
*/
js同步异步的常用方法
最新推荐文章于 2023-10-25 14:54:49 发布