promise async
最简用 promise
let res = function () {
return new Promise((resolve, reject) => { // 返回一个promise
setTimeout(() => {
resolve(10)
}, 3000)
})
}
res().then(x => { // promise.then()
let a = 20;
a += x
console.log(a);
})
多个异步用 async
let res = function () {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(10)
},3000)
})
}
async function test(){
console.log('before'); // 按顺序输出 before b after
let b=await res() // 可以按顺序执行多个 promise
b+=30;
console.log('b',b);
console.log('after');
} test();
async 返回 promise (直接在async函数里面操作就行了,不要再返回了)
let res = function () {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(10)
},3000)
})
}
async function test(){
let b=await res()
console.log('b',b);
b+=30;
return b; // async 返回一个 promise
} let cc=0
test().then(x=>{ // promise then
cc=x;
console.log('cc',cc);
})
async try.. catch..
let res = function (val) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (val > 3) { resolve(10)
} else {
reject(false)
}
}, 3000)
})
} async function test (val) {
try {
let b = await res(val)
b+=20;
console.log('b',b);
} catch (e) { // promise有 reject时 要 try()catch{}
if (e) {
console.log('b is true');
}else{
console.log('b is false');
}
}
} test(10);
promise try-catch
let res = function (val) {
return new Promise((resolve, reject) => { // 返回一个promise
setTimeout(() => {
if (val > 10) {
resolve(10)
}else{
reject('no4')
}
}, 3000)
})
}
res(1).then(x => { // promise.then()
let a = 20;
a += x
console.log(a);
}).catch(e=>{
if(e==='no'){
console.log('hahaha');
}else{
console.log('no input');
}
})
传统回调函数
let f = function (test) { // 传入一个函数
setTimeout(()=>{
let a = 10
test(a) // 把结果给一个函数
},3000)
}
f(function (val) {
console.log(val); //
})
promise 链式调用 promise.then().then()
/*
* promise.then(res=>{
* return p2 // promise的then 可以return 一个 Promise 即执行下一个promise,其结果可以继续then()获取
* }).then(res2=>{})
*
* */
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1)
}, 1000)
}) let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2)
}, 2000)
})
let p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3)
}, 3000)
})
p1.then((res) => {
console.log(res) // 第一个值
return p2 // then中返回下一个promise 可再加个 then 接收第二个值
}).then(res2 => {
console.log(res2)
return p3
}).then(res3 => {
console.log(res3)
console.log('end')
})
promise nodejs readFile
var fs = require('fs') function readFile (filePath) {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', function (err, data) {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
} readFile('./a.txt')
.then(data => {
console.log(data)
return readFile('./b.txt')
}).then(data2 => {
console.log(data2)
return readFile('./c.txt')
}).then(data3 => {
console.log(data3)
})
jq 支持 链式调用 $.get().then().then()
// jq 支持 链式调用 $.get().then().then()
var data = {}
$.get('xxx').then(user => {
data.user = user
return $.get('yyy')
}).then(jobs => {
data.jobs = jobs
console.log(data) // {user:{},jobs:[]}
})
封装 ajax 为 promise 和 callback
// 封装 ajax 为 promise 和 callback
/*
* XMLHttpRequest.DONE === 4 mdn
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText)
}
* xhr.onload = function () {
console.log('DONE', xhr.readyState); // readyState 为 4
};
* */
function apiGet (url, callback) {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest()
xhr.onload = function () { // 不是标准。
callback && callback(JSON.parse(xhr.responseText)) // 回调
resolve(JSON.parse(xhr.responseText))
}
xhr.onerror = function (err) {
reject(err)
}
xhr.open('get', url, true)
xhr.send()
})
} // json-server -w a.json -p 1234
apiGet('http://localhost:1234/posts').then(res => {
console.log(res)
})
/*
apiGet('http://localhost:1234/posts',function (res) {
console.log(res)
})*/
promise async的更多相关文章
- vue使用技巧:Promise + async + await 解决组件间串行编程问题
业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...
- nodejs 回调地狱解决 promise async
nodejs毁掉地狱是一直被人诟病的,以下总结一下解决毁掉地狱的一些方法.(暂时研究的比较浅) 1.promise promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled) ...
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...
- promise async await使用
1.Promise (名字含义:promise为承诺,表示其他手段无法改变) Promise 对象代表一个异步操作,其不受外界影响,有三种状态: Pending(进行中.未完成的) Resolved( ...
- Promise,async/await解决回调地狱
先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 as ...
- ES6 class setTimeout promise async/await 测试Demo
class Person { async getVersion () { return new Promise((resolve, reject) => { setTimeout(functio ...
- lazy evaluation and deferring a computation await promise async
Promise - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ ...
- promise, async和await
最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...
- 一眼看懂promise async的区别
// promise方法 let p1 = new Promise((resolve,reject) => { setTimeout(() => { resolve('我是p1') },4 ...
随机推荐
- php提供的用户密码加密函数
在实际项目中,对用户的密码加密基本上采用的 md5加盐的方式, php5.5后提供了一个加密函数,不需要手动加盐,不需要去维护盐值, $str = "123456"; $pwd ...
- [模板] K-D Tree
K-D Tree K-D Tree可以看作二叉搜索树的高维推广, 它的第 \(k\) 层以所有点的第 \(k\) 维作为关键字对点做出划分. 为了保证划分均匀, 可以以第 \(k\) 维排名在中间的节 ...
- Ubuntu16.04安装Redis并配置
Ubuntu16.04安装Redis并配置 2018年05月22日 10:40:35 Hello_刘 阅读数:29146 Ubuntu16.04安装Redis并配置 1):安装: 1:终端命令下载 ...
- Linux 版本svn安装
CentOS6.5离线安装subversion 下载 linux rpm安装包 (我只下载了subversion-1.6.12-1.rhel5.x86_64.rpm),直接安装时会提示缺少依赖,在 r ...
- kubernetes-kubeadm自动生成的证书过期的解决方法
拉取kubernetes的源码: git clone https://github.com/kubernetes/kubernetes.git 切换版本: cd kubernetes &&am ...
- edusoho -A5: AppBundle UML
edusoho -A5: AppBundle UML
- 读Zepto源码之内部方法
数组方法 定义 var emptyArray = [] concat = emptyArray.concat filter = emptyArray.filter slice = emptyArray ...
- Vue+koa2开发一款全栈小程序(9.图书详情页)
1.获取图书详情 1.修改server/controllers/bookdetail.js为 const {mysql}=require('../qcloud') module.exports=asy ...
- MySQL_表锁_lock tables tableName read
pre.环境准备 1.建立两个表S,T,并插入一些数据 --创建表S create table S(d int) engine=innodb; ); --创建表T create table T(c i ...
- CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解
在对获取资产信息时,简述有四种方案. 1.Agent (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...