获取 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 ...
随机推荐
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
- 3.更改ssh服务远程登录的配置
- 【java设计模式】【行为模式Behavioral Pattern】策略模式Strategy Pattern
package com.tn.策略模式; public class Client { private Strategy strategy; public void setStrategy(Strate ...
- java8 新特性入门 stream/lambda
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (b ...
- Function:光标位置插入文本并且光标移动到最后
//光标位置插入文本 function insertText(obj, str) { if(document.selection) { var sel = document.selection.cre ...
- [置顶]
android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
- Docker(四):Docker基本网络配置
1.Libnetwork Libnetwork提出了新的容器网络模型简称为CNM,定义了标准的API用于为容器配置网络. CNM三个重要概念: 沙盒:一个隔离的网络运行环境,保存了容器网络栈的配置,包 ...
- lesson - 6 Linux下磁盘管理
1. 查看磁盘或者目录的容量df 查看磁盘各分区使用情况 不加参数以k为单位 df -i inode数,df -h 以G或者T或者M df -m 以M单位显示 du 查看目录或者文 ...
- Android 7.1 WindowManagerService 屏幕旋转流程分析 (三)
三.屏幕的绘制 performSurfacePlacement()函数来触发window的绘制,这里最大的循环次数是6,当然一般不会到最大次数就会被Scheduled. final void perf ...
- DJango_生命周期
在django中,当我们访问一个url时,会通过路由匹配进入到响应的html页面中. Django的生命周期,指的就是当用户在浏览器上输入url,到用户看到整个页面之前,django后台都做了哪些事情 ...