全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

获取JavaScript异步函数的返回值

今天研究一个小问题: 怎么拿到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小时内与您取得联系。