javascript异步使用

216 阅读1分钟

JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

javascrit的一大特色为它的异步使用

1.异步匿名函数callback

即将function作为参数传入function的参数中,并回掉执行

例子:

function a(callback) {

alert("我是parent函数a!");

alert("调用回调函数");

callback();

}

function b(){

alert("我是回调函数b");

}

function c(){

alert("我是回调函数c"); }

function test() {

a(b);

a(c);

}

以上函数方法中,将b,c传入a function中并执行完a中自有代码后,执行传入的匿名函数。

2.es7中的await 与async

await与async为es6中promise中新增的语法糖

async作用为声明一个function为异步函数

await必须写在async声明的异步function内部,作用为等待异步方法执行完

例子

function sleep(second) {

return new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(' enough sleep~');
    }, second);
})

}

function normalFunc() {

console.log('normalFunc');

}

async function awaitDemo() {

await normalFunc();
console.log('something, ~~');
let result = await sleep(2000);
console.log(result);// 两秒之后会被打印出来

}

awaitDemo();

// normalFunc

// VM4036:13 something, ~~

// VM4036:15 enough sleep

上述例子中await使得内部异步执行操作变为了同步执行

3.promise简介

promise的结果有resolved和rejected两种

resolved为返回成功的状态

rejected为返回失败的状态

结果的获取:

new Promise(XXXXX)

.then(result=>{ //resolved结果 })

.catch(error=>{ //rejected结果 })