获取 JavaScript 异步函数返回值的笔记
wrong action
function asyncfunc() {
let ret = 100;
setTimeout(() => {
return ret;
}, 1000)
}
let ret = asyncfunc()
console.log(ret) // undefined
callback
function asyncfunc(callback) {
let ret = 100;
setTimeout(() => {
callback(ret)
}, 1000)
}
function callback(ret) {
// 处理异步获取的数据
console.log(ret)
}
asyncfunc(callback)
promise
function asyncfunc() {
let ret = 100
return new Promise(function(resolve) {
setTimeout(() => {
resolve(ret)
}, 1000)
})
}
asyncfunc().then(value => {
// 处理异步获取的数据
console.log(value)
})
generator
function asyncfunc() {
let ret = 100
setTimeout(() => {
it.next(ret)
}, 1000)
}
function *gen() {
let ret = yield asyncfunc()
// 处理异步获取的数据
console.log(ret)
}
let it = gen()
it.next()
generator + promise
function asyncfunc() {
let ret = 100
return new Promise(resolve => {
setTimeout(() => {
resolve(ret)
}, 1000)
})
}
function *gen() {
let ret = yield asyncfunc()
// 处理异步获取的数据
console.log(ret)
}
let it = gen()
it.next().value.then(value => {
it.next(value)
})
promise 解决了回调地狱的痛点,但是还是有回调;generaror 使得异步可以像同步一样书写,但是无法自动执行,需要多次调用 it.next()
;async/await 是 generator 的语法糖,使得 iterator 可以自动执行
暂时没发现 generator + promise 的正确使用姿势(只发现了 asyncfunc() 方法內可以不使用 it 变量,使得 asyncfunc() 方法更加干净,但是上面的例子引入了 promise 的回调,有点回到旧时代的感觉),待学习
2017/11/06: generator 和 promise 搭配使用,可能是为了能使错误捕获更加顺利
async/await
function asyncfunc() {
let ret = 100
return new Promise(resolve => {
setTimeout(() => {
resolve(ret)
}, 1000)
})
}
(async function() {
let ret = await asyncfunc()
// 处理异步获取的数据
console.log(ret)
})()
获取 JavaScript 异步函数返回值的笔记的更多相关文章
- JS异步函数 返回值
1. js 异步的几种情况 : 1.1 异步操作由浏览器内核的 webcore 来执行: onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任 ...
- 获取JavaScript异步函数的返回值
今天研究一个小问题: 怎么拿到JavaScript异步函数的返回值? 1.错误尝试 当年未入行时,我的最初尝试: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <s ...
- JavaScript处理异步请求的几种方式(取异步函数返回值)
JavaScript处理异步的几种方式 Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个 ...
- python使用threading获取线程函数返回值的实现方法
python使用threading获取线程函数返回值的实现方法 这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下 threading用于提供线程相 ...
- (转)函数中使用 ajax 异步 同步 返回值错误 主函数显示返回值总是undefined -- ajax使用总结
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAloAAAE0CAIAAAB7LwoKAAAgAElEQVR4nO2dy6sc152A6+/R2mXwSn ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- PHP获取函数返回值的引用
通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}
- JavaScript入门之函数返回值
函数返回值 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- matlab学习笔记13_1 函数返回值
一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...
随机推荐
- Memcached的安装与简单使用
Memcached下载 如果是Win10系统,还需要单独安装telnet服务,因为Win10把它给阉掉了.(默认下一步下一步安装) 一.安装Memcached 将Memcached解压到目录,以管理员 ...
- TempData知多少
网上对TempData的总结为: 保存在session中,Controller每次执行请求时,会从session中一次获取所有tempdata数据,保存在单独的内部数据字典中,而后从session中清 ...
- Elasticsearch批处理操作——bulk API
Elasticsearch提供的批量处理功能,是通过使用_bulk API实现的.这个功能之所以重要,在于它提供了非常高效的机制来尽可能快的完成多个操作,与此同时使用尽可能少的网络往返. 1.批量索引 ...
- 一个简单的java网络通信例子
先建立2个项目,分别是请求端和响应端,端口改成不一样的就行,比如请求端是8080,响应端是8081 废话不多说,直接上代码 请求端的Controller层 @GetMapping("/req ...
- EntityFramework Core数据查询
前言 本节我们再来讲讲EF Core,本节算是回归基础吧,当前项目EF Core还是处于1.1版本中,后续等待.net core等版本稳定了全部会更新到2.0版本中,到时再来更新相关文章分享给大家. ...
- bzoj 4345: [POI2016]Korale
Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的价值和.现在给所有可能的项链排序,先按权值从小到大排 ...
- Mysql数据库重要知识点(知了堂学习心得)
Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...
- tcpdump 命令详解
TCPdump: dump traffic on a network ,根据使用者的定义对网络上的数据包进行截获的一种包分析工具. TCPdump 可以讲网络中传送的数据包的 头信息完全截获下来提供 ...
- ELK开机启动 service文件内容
为了实现ELK的3部分开机启动,可以添加各项服务对应的service文件,再通过systemctl enable XXX实现ELK所有服务开机启动. Elasticsearch elasticsear ...
- [转]Android sharedpreferences使用
1. SharedPerferences保存的数据主要是类似配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对,SharedPreferences本身并没有写入数据的能力, ...