百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> JavaScript中如何异步函数的返回值
分享文章到:

JavaScript中如何异步函数的返回值

发布时间:01/15 来源: 浏览: 关键词:
这篇文章给大家分享了解决JavaScript中获取异步函数的返回值的经历与最终解决方案,有需要的同学快看看吧

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

1.错误尝试

当年未入行时,我的最初尝试:

<script>
functiongetSomething() {
 varr = 0;
 setTimeout(function() {
 r = 2;
 }, 10);
 returnr;
}
 
functioncompute() {
 varx = getSomething();
 alert(x * 2);
}
compute();
</script>

2.回调函数

弹出的不是4,而是0,后来知道这是异步的问题,

要用回调技术来做:

<script>
functiongetSomething(cb) {
 varr = 0;
 setTimeout(function() {
 r = 2;
 cb(r);
 }, 10);
}
 
functioncompute(x) {
 alert(x * 2);
}
getSomething(compute);
</script>

3.promise

回调函数真是个好东西,然后一直这么写代码写了很久。遇到异步就传函数!!后来我知道有promise这一个东西,专门解决由于回调函数引起的问题,又学会了promise:

<script>
functiongetSomething() {
 varr = 0;
 returnnewPromise(function(resolve) {
 setTimeout(function() {
  r = 2;
  resolve(r);
 }, 10);
 });
}
 
functioncompute(x) {
 alert(x * 2);
}
getSomething().then(compute);
</script>

promise仍然没有放弃回调,只是回调的位置发生了改变。

4.generator

再后来我又学会了generator,知道其有中断函数执行的能力,又做了新的尝试:

<script>
functiongetSomething() {
 varr = 0;
 setTimeout(function() {
 r = 2;
 it.next(r);
 }, 10);
}
 
function*compute(it) {
 varx = yield getSomething();
 alert(x * 2);
}
varit = compute();
it.next();
</script>

同步的写法,能实现异步的逻辑,感觉高大上了很多。

5.promise + generator

后来又听说promise加generator,才是异步的完美方式,赶紧用高射炮打蚊子(这个例子,还不足以说出二者在一起用的好处):

<script>
functiongetSomething() {
 varr = 0;
 returnnewPromise(function(resolve) {
 setTimeout(function() {
  r = 2;
  resolve(r);
 }, 10);
 });
}
 
function*compute() {
 varx = yield getSomething();
 alert(x * 2);
}
varit = compute();
it.next().value.then(function(value) {
 it.next(value);
});
</script>

6.async

心想这算是够?诺陌桑?罄从痔??s7给出了终极方案:async。

作为爱学习的少年,心想自己不能被落下:

<script>
functiongetSomething() {
 varr = 0;
 returnnewPromise(function(resolve) {
 setTimeout(function() {
  r = 2;
  resolve(r);
 }, 10);
 });
}
 
asyncfunctioncompute() {
 varx = await getSomething();
 alert(x * 2);
}
compute();
</script>

到这里终于长出了一口气。

后记:

上面所有的例子,在最新chrome上都可以运行。一个个小例子,点了点几个名词。

当然也只是“点”而已,如果能提供读者深入学习相关知识点的一个trigger,那么老姚就心满意足了。

以上就是老姚童鞋给我们分享的全部内容了,希望对大家理解JavaScript异步函数能够有所帮助

原文链接:http://www.qdfuns.com/notes/17398/8a2084587fbd3f6c170c1bb8a79045c6.html

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有3人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板