我们在写项目的时候有没有遇到这样的一个情况:一个函数里,嵌套着另一个异步函数,那如何在外面获取这个异步函数的结果呢?(return值)
       就比如这样一个例子:

function fn() {setTimeout(function(){let data = 222},2000)
}

我们如何获取定时器中data的值呢?


方法一 传入回调函数

function fn(callback) {setTimeout(function(){let data = 222callback(data)},2000)
}fn(function(data){console.log(data)    //  222
})

我们巧妙地在fn里传入一个回调函数,在定时器函数中调用这个回调函数,并把定时器函数中的结果通过函数传参的形式带出来,这样我们就可以通过fn的回调获取到结果了!
其实,这样的操作也被称为 —— 封装异步API(封装异步函数)
我们通过fn函数,将定时器异步函数进行封装。

方法二 Promise

function fn() {return new Promise(function (resolve, reject) {setTimeout(function () {let data = 222resolve(data)}, 2000)})
}fn().then(function(data) {console.log(data)
})

用Promise将异步函数进行包裹,在调用fn时会返回一个Promise实例,调用Promise实例的then函数,我们就可以拿到成功的回调值。

JavaScript封装异步函数 —— 【异步编程】 —— 如何获取一个函数中异步操作的结果?相关推荐

  1. C语言—字符指针作函数参数 按如下函数原型编程实现字符串连接函数strcat()的功能。void MyStrcat(char *dstStr, char *srcStr);

    按如下函数原型编程实现字符串连接函数strcat()的功能. void  MyStrcat(char *dstStr, char *srcStr); 输入提示信息: "Input a str ...

  2. JavaScript 习题:如何获取一个字符串中的数字字符,并按数组形式输出,如 bdjhs113fdfd456fnsd789djnskd 输出 [113,456,789]

    [题目来源:Duing] 如何获取一个字符串中的数字字符,并按数组形式输出,如 bdjhs113fdfd456fnsd789djnskd 输出 [113,456,789]. [解析来源:叁贰壹] 我自 ...

  3. python单稳态触发_使用 方法可以获取一个列表中最大元素的值。_学小易找答案...

    [填空题]若在列表的最后添加新元素,则可以直接使用列表的 方法. [填空题]将一个线程的 属性设置为True,则该线程为守护线程. [填空题]是在调用函数时函数名后面的一对小括号中给出的参数列表. [ ...

  4. React Native之函数作为参数传递给另外一个函数去调用

    1 用法 我们一般喜欢把js里面的函数作为参数传递给另外一个函数,然后再调用这个函数,有点像C语言里面的函数指针 2 代码测试 写了一个函数,2个参数分别是函数,然后更具数据决定调用哪个函数 /*** ...

  5. mysql获取下一条自增的id_mysql获取一个表中的下一个自增(id)值的方法

    mysql获取一个表中的下一个自增(id)值的方法 MySQL: Get next AUTO_INCREMENT value from/for table Note to self: To get t ...

  6. FileDemo4~5 获取一个目录中的所有子项/部分子项

    FileDemo4 获取一个目录中的所有子项 /** *    获取一个目录中的所有子项 *    方法:    File[] listFiles() *    重载方法: File[] listFi ...

  7. Go语言函数作为 值 赋值给一个变量 和 函数作为参数传入另一个函数的写法你不想了解咩

    1.在Go语言中,函数也是可以作为值赋值给另一个变量的,代码如下: package mainimport "fmt"func function1() {fmt.Println(&q ...

  8. python等待执行完毕 再继续执行_如何等待一个函数内部异步执行完毕再执行另外一个函数?...

    问题描述 有两个函数f1和f2,其中f1中有异步操作,执行完f1接着执行f2,因为f1内部有异步操作,所以会先执行完f2,再执行f1里的异步,如何等待f1异步执行完再执行f2. 备注:执行方式为f1( ...

  9. python中求差的函数_Python编程基础11:函数和模块

    一.函数和模块概述 (一)函数概述 函数可以看成是语句的集合,通过函数调用来执行其包含的语句.函数可以返回一个计算结果,根据每次函数调用的参数,可以返回不同的计算结果.Python利用函数提高代码的重 ...

最新文章

  1. adb server version(31) doesnt match this client(41)
  2. TheBeerHouse 网站项目学习笔记(5)---架构设计
  3. java实现输出字符串中的数字字符
  4. [Leetcode][第109题][JAVA][有序链表转换二叉搜索树][分治][快慢指针][中序遍历]
  5. 大话Fragment管理
  6. mysql配置两个猪数据库_Linux下安装启动多个Mysql
  7. [转]Flex与.NET互操作(三):基于WebService的数据访问(下)
  8. 腾讯课堂:了解it技术圈的虚拟化容器化之docker
  9. 优秀程序设计的原则(可以多读读)
  10. 热烈庆贺:一个月,由70名升级为60名!
  11. oracle及mysql错误记录
  12. 编写一个程序,给出汉字“你” “我” “他”在Unicode表中的位置
  13. excel几个数相加等于某个数_『excel表如何从一列数据中筛选出合计等于某数的某些数?』...
  14. word:回车替换成空格
  15. android和夜神模拟器哪个好,天天模拟器和夜神安卓模拟器哪个好 两者功能对比...
  16. 网易邮箱注册界面设计 html
  17. RedHat安装yum和配置yum源
  18. 自适应动态规划matlab,自适应动态规划ADP
  19. Unity Shader - Get Screen Pos
  20. 致——世界上最幸福的女孩——Chtholly

热门文章

  1. 约吗?有料有趣的物联网大会
  2. 3.7V升压12V电路
  3. Fmoc-Lys (biotin-PEG4)-OH,1334172-64-3生物素标记的、基于PEG的PROTAC连接物
  4. [益智]:有7克,2克砝码各一个,天平一个,如何利用
  5. 一致性检查的具体含义是什么
  6. 批量html转换word,用Word宏来实现批量将HTML转换成DOC
  7. ICP增值电信业务许可证是什么
  8. HTML静态网页毕业设计作品
  9. 【超图+CESIUM】【基础API使用示例】42、超图|CESIUM - 绘制编辑线段|读取kml文件绘制编辑|导出kml线段数据
  10. Java 微信开发(四)生成带参数二维码及分享到朋友圈、好友、QQ