1.  js 异步的几种情况 :

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

onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。
setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。
ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。

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

2. 异步函数返回值处理

2.1 setTimeout

    function getSomething(cb) {
var r = 0;
setTimeout(function () {
r = 2;
cb(r);
}, 2000);
}
function compute(x) {
console.log(x);
}
getSomething(compute);

2.2 promise

function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function(){
r = 2;
resolve(r);
},2000)
})
}
function compute(x) {
console.log(x * 2);
}
getSomething().then(compute);

初探Promise

2.3 async

function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function() {
r = 2;
resolve(r);
},2000)
})
}
async function compute() {
var x = await getSomething();
console.log(x * 2);
}
compute();

2.4 generator

function getSomething() {
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();

2.5 promise和generator相结合

function getSomething() {
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);
})

3. 相关文章

异步原理的理解和总结

JS同步异步以及回调函数?

JS异步函数返回值的几种方式

详解回调函数——以JS为例解读异步、回调和EventLoop

告诉你什么是javascript的回调函数

JS异步函数 返回值的更多相关文章

  1. JavaScript处理异步请求的几种方式(取异步函数返回值)

    JavaScript处理异步的几种方式 Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个 ...

  2. Node.js的函数返回值

    先看一段代码: function select(sqlscript){     var result = "";     sql.connect(config, function( ...

  3. js的函数返回值

    今天从跟公司牛人那学到的~避免以后忘了赶快记录下来 平时JS的function的返回值可以是一个数值,也可以是一个对象({name:abc,age:123}),更可以是一个函数(这里我是第一次听说), ...

  4. 获取 JavaScript 异步函数返回值的笔记

    wrong action function asyncfunc() { let ret = 100; setTimeout(() => { return ret; }, 1000) } let ...

  5. (转)函数中使用 ajax 异步 同步 返回值错误 主函数显示返回值总是undefined -- ajax使用总结

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAloAAAE0CAIAAAB7LwoKAAAgAElEQVR4nO2dy6sc152A6+/R2mXwSn ...

  6. 关于QT中evaluateJavaScript()函数返回值的处理问题

    关于QT中evaluateJavaScript()函数返回值的处理问题 - 寒风问雪的专栏 - 博客频道 - CSDN.NET 关于QT中evaluateJavaScript()函数返回值的处理问题 ...

  7. shell调用函数返回值深入分析

    编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`functi ...

  8. Python从线程获取函数返回值

    Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...

  9. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

随机推荐

  1. 注册页面的JSON响应方式详细分析(与前端页面交互方式之一)

    控制器层 需求分析: 访问路径:`/user/reg.do` //自己根据功能需求设定的请求参数:`username=xx&password=xx&&phone=xx& ...

  2. pyglet player sound

    Player = pyglet.media.Player() # our event handling function def on_eos(): print("on player eos ...

  3. spring boot 结合Redis 实现工具类

    自己整理了 spring boot 结合 Redis 的工具类引入依赖 <dependency> <groupId>org.springframework.boot</g ...

  4. 神秘的.user.ini文件

    原文链接:https://segmentfault.com/a/1190000011552335

  5. Codeforces 675E Trains and Statistic - 线段树 - 动态规划

    题目传送门 快速的vjudge通道 快速的Codeforces通道 题目大意 有$n$个火车站,第$i$个火车站出售第$i + 1$到第$a_{i}$个火车站的车票,特殊地,第$n$个火车站不出售车票 ...

  6. HihoCoder 1236 Scores - bitset - 分块

    Kyle is a student of Programming Monkey Elementary School. Just as others, he is deeply concerned wi ...

  7. fatal: unable to access 'https://github.com/open-falcon/falcon-plus.git/': Peer reports incompatible or unsupported protocol version

    git通过git clone下载github上的资源到机器上,结果出现如题所示的错误. [root@server data]# git clone https://github.com/pingcap ...

  8. shell if 语句

    一.过程式 编程语言的代码执行顺序: a.顺序执行:逐条执行: b.选择执行: 代码有一个分支:条件满足时才会执行: 俩个或以上的分支:只会执行其中一个满足条件的分支: c.循环执行: 代码片段(循环 ...

  9. Selenium 15: How to Run Parallel Tests Using Selenium Grid and JUnit

    In this post, I will give two techniques and describe how to run your selenium tests in parallel by ...

  10. SVM学习笔记4-核函数和离群点的处理

    核函数在svm里,核函数是这样定义的.核函数是一个n*n(样本个数)的矩阵,其中:$K_{ij}=exp(-\frac{||x^{(i)}-x^{(j)}||^{2}}{2\sigma ^{2}})$ ...