注:我的代码是在vue 中的。
Test() {
return this.axios({
url: '/test.json',
method: 'get'
}).then((res) => {
console.log('这是Test方法')
})
}
调用Test()方法。
this.Test().then(
res => {
console.log('进到res')
},
rej => {
console.log('进到rej')
}
)
这样执行过后,控制台会打印:
我们注意到了,他是进入了res这个代码块里,那么如何进入rej这个代码块呢?
Test() {
return this.axios({
url: '/test.json',
method: 'get'
}).then((res) => {
console.log('这是Test方法')
return new Promise.reject('错误')
})
}
是的,在console.log下面增加了一行代码,再来看看打印结果吧!
打印出来的就是rej而不是res了。
Test() {
return this.axios({
url: '/test.json',
method: 'get'
}).then((res) => {
console.log('这是Test方法')
})
}
Test1() {
return this.axios({
url: '/test.json',
method: 'get'
}).then((res) => {
console.log('这是Test1方法')
})
}
//依次发送Test、Test1请求
this.Test().then(res => {
this.Test1()
},rej => {
// 发生错误也发送请求
this.Test1()
})
Test() {
return this.axios({
url: '/test.json',
method: 'get'
}).then((res) => {
console.log('这是Test方法')
return res
})
}
2.如果想走rej,那么得在之前的reject括号里加上返回的数据:
Test() {
return this.axios({
url: '/test.json',
method: 'get'
}).then((res) => {
console.log('这是Test方法')
return Promise.reject(res)
})
}
返回之后,数据就可以在步骤二中的res或者rej获得了。
其实本质跟网络请求没有太大区别啦。
Test() {
return new Promise((resolve, reject) => {
console.log('测试')
})
}
Test() {
return new Promise((resolve, reject) => {
console.log('测试')
resolve('测试res')
})
}
如果是想走rej过,就这么写:
Test() {
return new Promise((resolve, reject) => {
console.log('测试')
reject('测试rej')
})
}
最后还是一样,去调用这个方法:
this.Test().then(
res => {
console.log('进到res',res)
},
rej => {
console.log('进到rej',rej)
}
)
示例中是用Promise
,当然也可以用于axios。
Promise
的对象,在其中执行异步操作setTimeout
function asyncFun(time) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(`耗时:${time / 1000}s`);
}, time);
});
}
function
前加上async
,我们将会在这个方法中去调用步骤1
的方法。async function asyncHandler() {
console.log(await asyncFun(3000));
const res = await asyncFun(1000);
console.log(res);
await asyncFun(2000).then((res) => {
console.log(res);
});
return "执行完毕";
}
步骤2
的方法:asyncHandler().then((res) => {
console.log(res);
});
在步骤2
中,我用了三种方式,将异步方法的结果打印出来: