美文网首页
封装嵌套的异步函数,如何取得返回值带例子

封装嵌套的异步函数,如何取得返回值带例子

作者: yujiawei007 | 来源:发表于2017-09-10 15:22 被阅读0次

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 回调函数

<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>

以上就是JavaScript异步函数返回值的获取方法

相关文章

  • 封装嵌套的异步函数,如何取得返回值带例子

    1 错误尝试 2 回调函数 3 promise 回调函数真是个好东西,然后一直这么写代码写了很久。遇到异步就...

  • 封装嵌套的异步函数,如何取得返回值

    因为不知道异步函数何时执行,如果用闭包取得返回值,那么取得的值不一定对.所以,要把内部异步函数执行取得的返回值作为...

  • 『德不孤』Pytest框架 — 13.Fixture装饰器的使用

    6、带返回值的Fixture 上面例子是带返回值并且还要实现teardown()后置函数的Fixture写法。 这...

  • http事件回调

    1、什么是回调函数? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2、什么事同步/异步? 同...

  • ajax异步回调

    promise异步封装例子

  • Promise和async\await

    回调函数 用来处理异步问题,例如发送Ajax,setTimeout等 Promise 封装的例子 async\await

  • Python笔记四 装饰器

    装饰器 = 高阶函数+函数嵌套+闭包 高阶函数 = 参数 or 返回值为函数 函数嵌套 = 在函数中定义函数 闭包...

  • 函数

    函数的定义 有参数有返回值 无参无返回值的三种定义方式 嵌套函数嵌套函数的作用域在父函数(demo1)内部 外部参...

  • http概念

    1、什么是回调函数? 回调试异步编程时的基础 将后续逻辑封装成另外一个函数的参数,做嵌套调用 可以是普通的函数 也...

  • C语言函数

    1.函数的定义 有参数有返回值 无参无返回值函数 无参有返回值函数 有参无返回值函数 注意: 函数不能嵌套定义 2...

网友评论

      本文标题:封装嵌套的异步函数,如何取得返回值带例子

      本文链接:https://www.haomeiwen.com/subject/kyttsxtx.html