今天研究一个小问题: 怎么拿到JavaScript异步函数的返回值?

1.错误尝试
当年未入行时,我的最初尝试:
<script>
function getSomething() {
var r = 0;
setTimeout(function() {
r = 2;
}, 10);
return r;
}
function compute() {
var x = getSomething();
alert(x * 2);
}
compute();
</script>
2.回调函数
弹出的不是4,而是0,后来知道这是异步的问题,
要用回调技术来做:
<script>
function getSomething(cb) {
var r = 0;
setTimeout(function() {
r = 2;
cb(r);
}, 10);
}
function compute(x) {
alert(x * 2);
}
getSomething(compute);
</script>
3.promise
回调函数真是个好东西,然后一直这么写代码写了很久。遇到异步就传函数!!后来我知道有promise这一个东西,专门解决由于回调函数引起的问题,又学会了promise:
<script>
function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function() {
r = 2;
resolve(r);
}, 10);
});
}
function compute(x) {
alert(x * 2);
}
getSomething().then(compute);
</script>
promise仍然没有放弃回调,只是回调的位置发生了改变。
4.generator
再后来我又学会了generator,知道其有中断函数执行的能力,又做了新的尝试:
<script>
function getSomething() {
var r = 0;
setTimeout(function() {
r = 2;
it.next(r);
}, 10);
}
function *compute(it) {
var x = yield getSomething();
alert(x * 2);
}
var it = compute();
it.next();
</script>
同步的写法,能实现异步的逻辑,感觉高大上了很多。
5.promise + generator
后来又听说promise加generator,才是异步的完美方式,赶紧用高射炮打蚊子(这个例子,还不足以说出二者在一起用的好处):
<script>
function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function() {
r = 2;
resolve(r);
}, 10);
});
}
function *compute() {
var x = yield getSomething();
alert(x * 2);
}
var it = compute();
it.next().value.then(function(value) {
it.next(value);
});
</script>
6.async
心想这算是够的吧,后来又听说es7给出了终极方案:async。
作为爱学习的少年,心想自己不能被落下:
<script>
function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function() {
r = 2;
resolve(r);
}, 10);
});
}
async function compute() {
var x = await getSomething();
alert(x * 2);
}
compute();
</script>
到这里终于长出了一口气。
后记:
上面所有的例子,在最新chrome上都可以运行。一个个小例子,点了点几个名词。
当然也只是“点”而已,如果能提供读者深入学习相关知识点的一个trigger,那么老姚就心满意足了。
以上就是老姚童鞋给我们分享的全部内容了,希望对大家理解JavaScript异步函数能够有所帮助
# js获取异步函数返回值
# js获取异步返回值
# ajax异步获取返回值
# JS中实现函数return多个返回值的实例
# JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
# 怎么通过onclick事件获取js函数返回值(代码少)
# javascript中声明函数的方法及调用函数的返回值
# js中一个函数获取另一个函数返回值问题探讨
# JS函数的返回值如何使用
# 回调
# 出了
# 这是
# 几个
# 这一
# 是个
# 才是
# 上了
# 学会了
# 还不
# 给我们
# 很久
# 我又
# 点了
# 要用
# 弹出
# 写了
# 来做
# 上都
# 在一
相关文章:
动图在线制作网站有哪些,滑动动图图集怎么做?
如何规划企业建站流程的关键步骤?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站主机CVM配置优化、SEO策略与性能提升指南
javascript基本数据类型及类型检测常用方法小结
文字头像制作网站推荐软件,醒图能自动配文字吗?
常州企业网站制作公司,全国继续教育网怎么登录?
c# 服务器GC和工作站GC的区别和设置
C#怎么创建控制台应用 C# Console App项目创建方法
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
,石家庄四十八中学官网?
如何用好域名打造高点击率的自主建站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何通过FTP空间快速搭建安全高效网站?
如何通过.red域名打造高辨识度品牌网站?
建站之星24小时客服电话如何获取?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何使用Golang table-driven基准测试_多组数据测量函数效率
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何快速完成中国万网建站详细流程?
如何破解联通资金短缺导致的基站建设难题?
用v-html解决Vue.js渲染中html标签不被解析的问题
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何快速搭建安全的FTP站点?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
长沙做网站要多少钱,长沙国安网络怎么样?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
建站主机选择指南:服务器配置与SEO优化实战技巧
宝塔面板创建网站无法访问?如何快速排查修复?
官网网站制作腾讯审核要多久,联想路由器newifi官网
建站之星多图banner生成与模板自定义指南
香港网站服务器数量如何影响SEO优化效果?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
设计网站制作公司有哪些,制作网页教程?
建站之星在线客服如何快速接入解答?
无锡营销型网站制作公司,无锡网选车牌流程?
清除minerd进程的简单方法
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站主机服务器选购指南:轻量应用与VPS配置解析
成都网站制作报价公司,成都工业用气开户费用?
北京企业网站设计制作公司,北京铁路集团官方网站?
如何选择靠谱的建站公司加盟品牌?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。