promise同步处理
// 获得文章类型getType() {return new Promise((resolve, reject) => {try {this.request(this.api.getArticleType, {}, 'GET', 'application/json', 1).then(res => {this.tabs = res.rows.map(item => item.ty
·
async和await处理:
// 获得文章类型
async getType() {
return new Promise((resolve, reject) => {
try {
this.request(this.api.getArticleType, {}, 'GET', 'application/json', 1).then(res => {
this.tabs = res.rows.map(item => item.typeLabel)
resolve(res.rows)// 此处也可不返回值,直接resolve(),前面处理后,调用处直接 await this.getType()即可
})
} catch (e) {
reject(e)
}
})
}
// 他处调用,方法名前加async(因为这里需要先获得typeList,再去调用下面的请求)
this.typeList = await this.getType()
也可使用then链处理(举个例子):
function eat(){
console.log('吃饭');
return new Promise((resolve, reject) => { // 设置定时器,异步操作
setTimeout(function(){
resolve('准备睡觉');
}, 1000);
})
}
function sleep(data){
console.log(data + '=>' + '睡觉');
return new Promise((resolve, reject) => {
setTimeout(function(){
resolve('准备打豆豆');
}, 1000);
});
}
function hit(data){
console.log(data + '=>' + '打豆豆');
return new Promise((resolve, reject) => {
setTimeout(function(){
resolve('结束');
}, 1000);
});
}
// 链式调用
eat().then(function(data){
return sleep(data); // 返回一个Promise实例
}).then(function(data){
return hit(data); // 返回一个Promise实例
}).then(function(data){
console.log(data);
});
// 链式调用简化写法
eat()
.then(sleep)
.then(hit)
.then(function(data){
console.log(data);
});
结果1:
ps:.then 中指定的方法调用是异步进行的。
var promise = new Promise(function (resolve){
console.log("inner promise"); // 1
resolve(42);
});
promise.then(function(value){
console.log(value); // 3
});
console.log("outer promise"); // 2
结果是 1,2,3
原因是在调用 promise.then 注册回调函数的时候 promise 对象已经是确定的状态,Promise 也会以异步的方式调用该回调函数,这是在 Promise 设计上的规定方针。
更多推荐
已为社区贡献2条内容
所有评论(0)