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 ...
随机推荐
- 三、调试IIS启动域名配置
一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...
- Lodop的TABLE中format格式化的使用
LODOP中的ADD_PRINT_TABLE支持很多函数和计算方法,可以用tdata对table表格里额数据进行计算,用format对结果进行格式化.这个format只能和tdata搭配使用,不能单独 ...
- FastDFS 分布式文件系统搭建
安装依赖环境yum install make cmake gcc gcc-c++ pcre-devel zlib-devel perl-devel 安装libfastcommon-master.zip ...
- Memory Layout for Multiple and Virtual Inheritance
Memory Layout for Multiple and Virtual Inheritance(By Edsko de Vries, January 2006)Warning. This art ...
- 飞旋treap
虽然叫做非旋treap但是飞旋treap很带感所以就用这个名字了(SB) 这个东西是真的好写...... 主要的两个函数只有两个,rotate和splay,split和merge. merge就是大家 ...
- axd文件
ashx与axd作用相同,ashx一般在本项目内,axd在其它dll中.axd扩展名的必须要在web.config中的<httpHandlers>中进行注册,而ashx直接在项目中当成as ...
- [再寄小读者之数学篇](2014-09-22 distributions and square integrable functions)
Suppose that $f\in L^2$, $g\in \scrD'$, if $$\bex f=g,\mbox{ in }\scrD', \eex$$ then $f=g\in L^2$. I ...
- How to learn PDE (怎么学偏微分方程)
To learn PDE, you need some knowledge of physics (to build up the intuition), solid training of anal ...
- 高并发秒杀系统--Service接口设计与实现
[DAO编写之后的总结] DAO层 --> 接口设计 + SQL编写 DAO拼接等逻辑 --> 统一在Service层完成 [Service层的接口设计] 1.接口 ...
- UEditor调用上传图片、上传文件等模块
来源:https://www.cnblogs.com/lhm166/articles/6079973.html 说到百度富文本编辑器ueditor(下面简称ue),我不得不给它一个大大的赞.我们在网站 ...