js中[同步调用异步]/[异步调用异步]执行逻辑

//同步方法A调用的两个异步方法的两种执行方式如下,
//执行逻辑:
//A执行时,先调用InvokeApiAsync1,再调用InvokeApiAsync2(体现A的同步性),再执行1和2中先返回 
//promise的一方,最后执行后返回promise的一方(体现子方法的异步性)
//这里需要注意的是,不要因为A是同步就认为会完整的执行完1或2及then内部的逻辑,then的代码块类似
//回调方法,
//方式一:
function A()
{
InvokeApiAsync1().then(()=>{
console.log(1);
});
InvokeApiAsync2().then(()=>{
console.log(2);
});
}
//方式二:将异步方法的执行及其回调单独封装一下
function A()
{
exec_InvokeApiAsync1();
exec_InvokeApiAsync2();
}
async function exec_InvokeApiAsync1()
{
var result= await InvokeApiAsync1();
console.log(1);
}
async function exec_InvokeApiAsync2()
{
var result= await InvokeApiAsync2();
console.log(2);
}
//以下A是异步方法调用异步方法的情况,则InvokeApiAsync1执行完后才会执行InvokeApiAsync2
//如果使用then来达到相同的效果则需要使用then的嵌套,没有async/await来的简洁
async function A()
{
var result= await InvokeApiAsync1();
console.log(1);
var result= await InvokeApiAsync2();
console.log(2);
}

function A()
{
InvokeApiAsync1().then(()=>{
 console.log(1);
 InvokeApiAsync2().then()
    {
    console.log(2);
    }
 });
}
//其他:JavaScript执行线程本身是单线程,但是整个浏览器不是单线程的。V8引擎在检测到异步调用,如setTimeout等WebAPIs调用后,会将其交给浏览器的其他线程进行执行处理,完了后再通过事件循环机制返回执行线程执行回调。

你可能感兴趣的:(javascript,前端,开发语言)