async js 返回值_JS异步函数 返回值

1.  js 异步的几种情况 :

1.1 异步操作由浏览器内核的 webcore 来执行:

onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。

setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。

ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。

1.2 如:http (ajax)、UI 重绘 、事件 ( onclick )、延时函数 (setTimeout)

2. 异步函数返回值处理

2.1 setTimeout

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

functiongetSomething(cb) {var r = 0;

setTimeout(function() {

r= 2;

cb(r);

},2000);

}functioncompute(x) {

console.log(x);

}

getSomething(compute);

View Code

2.2 promise

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

functiongetSomething() {var r = 0;return new Promise(function(resolve) {

setTimeout(function(){

r= 2;

resolve(r);

},2000)

})

}functioncompute(x) {

console.log(x* 2);

}

getSomething().then(compute);

View Code

2.3 async

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

functiongetSomething() {var r = 0;return new Promise(function(resolve) {

setTimeout(function() {

r= 2;

resolve(r);

},2000)

})

}

asyncfunctioncompute() {var x =await getSomething();

console.log(x* 2);

}

compute();

View Code

2.4 generator

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

functiongetSomething() {var r = 0;

setTimeout(function() {

r= 2;

it.next(r);

},2000);

}function *compute(it) {var x =yield getSomething();

console.log(x* 2);

}var it =compute();

it.next();

View Code

2.5 promise和generator相结合

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

functiongetSomething() {var r = 0;return new Promise(function(resolve) {

setTimeout(function() {

r= 2;

resolve(r);

},2000)

})

}function *compute() {var x =yield getSomething();

console.log(x* 2);

}var it =compute();

it.next().value.then(function(value) {

it.next(value);

})

View Code

3. 相关文章

你可能感兴趣的:(async,js,返回值)