获取 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 ...
随机推荐
- 项目实战12.2—企业级监控工具应用实战-zabbix操作进阶
无监控,不运维.好了,废话不多说,下面都是干货. 流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html 一.U ...
- 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript> —— KYLE SIMPSON 在JS的面向 ...
- vue2.0---vue-router总结(项目基于vue-cli)
vue2.0---vue-router总结(项目基于vue-cli) 1. 在项目中安装: npm install vue-router --save 2. 在项目中的引入: // The Vue b ...
- 4.前端基于react,后端基于.net core2.0的开发之路(4) 前端打包,编译,路由,模型,服务
1.简要的介绍 学习react,首先学习的就是javascript,然后ES6,接着是jsx,通常来说如果有javascript的基础,上手非常快,但是真正要搭建一个前端工程化项目,还是有很多坑的 搞 ...
- [机器学习系列] k-近邻算法(K–nearest neighbors)
C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...
- lesson - 12 Linux系统日常管理1
监控系统状态 – w, vmstat命令w, uptimesystem load averages 单位时间段内活动的进程数 查看cpu的个数和核数vmstat 1vmstat 1 10vmstat各 ...
- ln 命令详解
ln 命令 作用:它的功能是为某一个文件在另外一个位置建立一个同步的链接 参数:必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式, ...
- Java NIO (三) 通道(Channel)
通道(Channel):由 java.nio.channels 包定义的,Channel 表示 IO 源与目标打开的连接.Channel 类似于传统的"流",只不过 Channel ...
- unity创建和加载AssetBundle
先说一下为什么要使用AssetBundle吧,以前做东西一直忽略这个问题,现在认为这个步骤很重要,代码是次要的,决策和为什么这样搞才是关键. 一句话概括吧,AssetBundle实现了资源与服务分离, ...
- Java自己动手写连接池四
Java自己动手写连接池四 测试: package com.kama.cn; import java.sql.Connection; public class Test { public static ...