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 ...
随机推荐
- 用pip下载的python模块怎么在PyCharm中引入报错
在IDE中导入下载的模块,比如:numpy模块 你会发现虽然你安装了numpy模块,在CMD中python可以import numpy,但是你在PyCharm引不进去,为什么呢?你要是有注意的话,安装 ...
- [SimplePlayer] 1. 从视频文件中提取图像
在开始之前,我们需要了解视频文件的格式.视频文件的格式众多,无法三言两语就能详细分析其结构,尽管如此,ffmpeg却很好地提取了各类视频文件的共同特性,并对其进行了抽象描述. 视频文件格式,统称为co ...
- JS类型
1.查看类型 可以使用 typeof 操作符来检测变量的数据类型. typeof "John" // 返回 string typeof 3.14 // 返回 number type ...
- MT【316】常数变易法
已知数列$\{a_n\}$满足$a_1=0,a_{n+1}=\dfrac{n+2}{n}a_n+1$,求$a_n$ 解答:$\dfrac{a_{n+1}}{n(n+1)}=\dfrac{a_n}{n( ...
- 洛谷P1880 石子合并(环形石子合并 区间DP)
题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...
- 【洛谷P1134 阶乘问题】
[传送门] #include<bits/stdc++.h> using namespace std; int main() { ; cin>>a; ;i<=a;i++) ...
- 时间序列分析模型——ARIMA模型
时间序列分析模型——ARIMA模型 一.研究目的 传统的经济计量方法是以经济理论为基础来描述变量关系的模型.但经济理论通常不足以对变量之间的动态联系提供一个严密的说明,而且内生变量既可以出现在方程的左 ...
- crm 数据展示 和分页思想(一)
1. 数据的展示 数据通过ORM查询出来 对象列表 QuerySet 1. 普通的字段 对象.字段名 ——> 数据库中的值 <td>{{ customer.phone }}</ ...
- .net core 多租户框架整理
一 saaskitAsp.Net Core multi-tenant application Sample using #SaaSKithttps://github.com/saaskit/saask ...
- 基于ionic4、cordova搭建android开发环境
前颜(yan)最近公司有一个项目需求是利用h5进行跨平台开发,这里所说的跨平台开发指的是:将h5代码利用某种方式或工具环境进行打包,最后生成android的apk以及ios的ipa. 本文只讲解and ...