promise的简单用法
栏目: JavaScript · 发布时间: 7年前
内容简介:在es6中,promise终于成为了原生对象,可以直接使用。promise是异步编程的一种解决方案。解决了异步回调多层嵌套的问题。1.promise状态的理解
在es6中,promise终于成为了原生对象,可以直接使用。
promise是异步编程的一种解决方案。解决了异步回调多层嵌套的问题。
1.promise状态的理解
用new Promise实例化的promise对象有三个状态:resolved(fulfilled) rejected pending
2.promise的简单用法
// 封装一个方法run_a,当Math.random()取的值小于0.5时执行resolve,否则执行reject
var run_a = function () {
var _promise = new Promise(function(resolve, reject){
// 模拟异步
setTimeout(function () {
var rand = Math.random()
if (rand < 0.5) {
resolve('resole_a ' + rand)
} else {
reject('reject_a ' + rand)
}
}, 300)
})
return _promise
}
// 封装一个方法run_b,当Math.random()取的值小于0.5时执行resolve,否则执行reject
var run_b = function () {
var _promise = new Promise(function(resolve, reject){
setTimeout(function () {
var rand = Math.random()
if (rand < 0.5) {
resolve('resole_b ' + rand)
} else {
reject('reject_b ' + rand)
}
}, 300)
})
return _promise
}
run_a().then(function (data) {
console.log('第一次产生的值:', data) // 第一次resolve才能进then,否则直接进catch
return run_b() // 第一次resolve才能执行第二次,并且第二次的值必须继续.then才能获得。
// 此处必须return出来才能链式调用
}).then(function (data) {
console.log('第二次产生的值:', data)
}).catch(function (e) {
console.log('失败:', e)
})
复制代码
3.promise的一些方法
axios是promise的实现版本,axios执行后返回一个promise对象
axios.post('xxx').then(res => {
return axios.post('bbb', {name: res.name})
}).then(res => {
console.log(res)
})
复制代码
promise的其他方法all, race
Promise.all([
axios.get('xxx'),
axios.get('aaa')
]).then().catch(error=>{
})
复制代码
promise.all([p1,p2,p3])当p1,p2,p3的状态都变成resolved时,promise的状态才会变成resolved
promise.race([p1,p2,p3])竞速方法,p1,p2,p3只要有一个改变状态,promise就会立即变成相同的状态并执行对应的回调。
promise.all(参数是promise对象)
var run_c = function () {
var _promise = new Promise(function(resolve, reject){
setTimeout(function () {
var rand = Math.random()
if (rand < 0.5) {
resolve('c_ok ' + rand)
} else {
reject('c_error ' + rand)
}
}, 1000)
})
return _promise
}
var run_d = function () {
var _promise = new Promise(function(resolve, reject){
setTimeout(function () {
var rand = Math.random()
if (rand < 0.5) {
resolve('d_ok ' + rand)
} else {
reject('d_error ' + rand)
}
}, 1000)
})
return _promise
}
Promise.all([run_c(), run_d()]).then(function (data) {
console.log('全部执行完:', data)
}, function (e) {
console.log('promise.all有异常:', e)
})
复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
软件人才管理的艺术
Michael Lopp / 罗小平 / 人民邮电出版社 / 201008 / 35.00元
本书作者具有15年的硅谷人才管理经验,他在博客上发表了大量探讨软件人才的管理之道的文章,深受读者欢迎。本书素材取自他的博客文章,用深入浅出的语言,讲述发人深思的道理,具有很强的现实操作性。 本书分为三大部分:“管理的箭袋”、“过程就是产品”、“你的其他版本”。前两部分分别讲述了人员与产品的管理,第三部分除了讨论管理之外,还讲述了如何有针对性地准备简历和电话面试,来提高自己面试成功的几率。书中......一起来看看 《软件人才管理的艺术》 这本书的介绍吧!