最简用  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的更多相关文章

  1. vue使用技巧:Promise + async + await 解决组件间串行编程问题

    业务场景描述 大家都通过互联网投递过简历,比如在智联.58.猎聘等平台.投递心仪的职位前一般都需要前提创建一份简历,简历编辑界面常规的布局最上面是用户的个人基本信息,如姓名.性别.年龄.名族等,接着是 ...

  2. nodejs 回调地狱解决 promise async

    nodejs毁掉地狱是一直被人诟病的,以下总结一下解决毁掉地狱的一些方法.(暂时研究的比较浅) 1.promise promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled) ...

  3. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )

    Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...

  4. promise async await使用

    1.Promise (名字含义:promise为承诺,表示其他手段无法改变) Promise 对象代表一个异步操作,其不受外界影响,有三种状态: Pending(进行中.未完成的) Resolved( ...

  5. Promise,async/await解决回调地狱

    先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async 函数 as ...

  6. ES6 class setTimeout promise async/await 测试Demo

    class Person { async getVersion () { return new Promise((resolve, reject) => { setTimeout(functio ...

  7. lazy evaluation and deferring a computation await promise async

    Promise - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_ ...

  8. promise, async和await

    最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...

  9. 一眼看懂promise async的区别

    // promise方法 let p1 = new Promise((resolve,reject) => { setTimeout(() => { resolve('我是p1') },4 ...

随机推荐

  1. python的基本流程控制

    一:if判断语句 1.1 if判断语法之一 if条件: 子代码块 1.2 if判断语法之二 if条件: 子代码块 else: 子代码块 1.3 if判断语法之三 if条件: if条件: 子代码块 1. ...

  2. Lodop的TABLE中format格式化的使用

    LODOP中的ADD_PRINT_TABLE支持很多函数和计算方法,可以用tdata对table表格里额数据进行计算,用format对结果进行格式化.这个format只能和tdata搭配使用,不能单独 ...

  3. [洛谷P4234] 最小差值生成树

    题目类型:\(LCT\)动态维护最小生成树 传送门:>Here< 题意:求一棵生成树,其最大边权减最小边权最小 解题思路 和魔法森林非常像.先对所有边进行排序,每次加边的时候删除环上的最小 ...

  4. Django 信号

    信号 Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到. 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生. 这在多处代码和同一事件 ...

  5. 20175209 《Java程序设计》第三周学习总结

    20175209 <Java程序设计>第三周学习总结 教材学习内容总结 第四章知识点 1.发展阶段: 面向机器——面向过程——面向对象(特点:封装性,继承性,多态性) 2.类: 类 声明变 ...

  6. CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息

    1.创建硬件资产信息 import json from django.shortcuts import render,HttpResponse from django.views.decorators ...

  7. NOI-OJ 1.7 ID:21 单词替换

    整体思路 本题如果使用scanf每次读入一个单词.比对替换后再进行输出的话就十分简单,使用这种方法必须要用数组把读入的所有单词存起来,读入的count个单词的前n-2个是原文,第n-1个是查找的单词, ...

  8. MyEclipse编码方式设置

    1.windows -> Preferences -> general -> Workspace:

  9. WebService - 基础概念

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  10. underscore用法大全

    1._.find函数 var one = _.find(all, function (item) { return item.C_ID == selected; }); $('#C_NAME').va ...