1.同步函数:当一个函数同步调用时,该函数不会被调用时不会立即返回,直到该函数所要做的事情全部做完了才返回
2.异步函数:当一个异步函数被调用时,该函数会立即返回,尽管这个函数规定的操作任务还没有完成
javascript是异步编程的,这是js的一个优点,但是也是它的一个缺点,因为当我们想要使用函数执行完成的结果来进行下一步操作时,会有一些麻烦,解决这种问题的方法是回调,因为回调的代码的层次很深不便于维护,所以有了promise,但是promise也有一些缺点,所以我们有async和await,但是二者都有其各自的优点,所以通常我们是二者结合起来使用的。
在js中我们可以使用async函数表达式来定义一个异步函数,在异步函数中我们可以使用await放在promise之前,将会暂停执行这个函数,直到promise执行或者是拒绝
并行执行一个异步函数
function pause(){
return new Promise((res)=>setTimeout(res,500));
}
const promise1 = pause();
const promise2 = pause();
Promise.all([promise1,promise2]).then(()=>{console.log('i will be logged after 500ms')})
但是如果我们写成这样的话,因为await要等到第一个完成之后再开始执行,所以需要1000ms之后才会打印出内容
async function waitForMoment(){
await pause();
await pause();
console.log('i will be logged after 1000ms');
}
为了解决这个问题,我们必须调整位置
async function inParalell(){
const await1 = pause();
const await2 = pause();
await await1;
await await2;
console.log('i will be logged after 500ms');
}
而在func当中,我们常使用的是async表达式创建的一个异步函数,就像这样
export async function listAll(param){
return request(createTheURL(Config.API.APPLICATION,'list'),{
method: 'GET',
body:param,
})
}
其中的request函数会返回一个promise