我正在创建一个函数来检查url中是否有图像,它应该返回true或false,具体取决于成功。
var image = this.checkImage(imageUrl);
console.log('image: ' + image);
async checkImage(image){
var a;
await RNFetchBlob.fetch('GET', image)
.then((res) => {
a = true;
})
.catch((errorMessage, statusCode) => {
a = false;
})
console.log(a);
return a;
}
console.log(a);
返回true或false,以便工作正常,但console.log('image: ' + image);
返回[object Object]
你能弄明白我的代码有什么问题吗?
答案 0 :(得分:0)
javadoc,因此您的image
变量是Promise。处理它:
this.checkImage(imageUrl).then(function (image) {
console.log(image)
})
在我的浏览器中,如您所述,Promise.resolve(value).toString()
会返回'[object Promise]'
而不是'[object Object]'
,但我相信无论Promise实现如何,基本问题都会保持不变。
作为旁注,我认为异步函数应该声明为async function name() {}
而不是async name() {}
。
答案 1 :(得分:0)
异步函数始终返回Promise。在未捕获的异常情况下,该承诺被拒绝,否则它将被解析为异步函数的返回值。
this.checkImage(imageUrl).then(image => console.log('image: ' + image));;
async checkImage(image){
var a = await RNFetchBlob.fetch('GET', image)
.then((res) => {
a = true;
})
.catch((errorMessage, statusCode) => {
a = false;
})
return a;
}
答案 2 :(得分:0)
此处的问题是您必须await
调用checkImage
,否则会立即返回承诺。
const image = {
async getImage() {
// without this await the checkImage fn immediately return a promise
var image = await this.checkImage('someURL');
console.log('image: ' + image);
}
async checkImage(image){
var a;
await fetch(image)
.then((res) => {
a = true;
})
.catch((errorMessage, statusCode) => {
a = false;
})
console.log(a);
return a;
}
}
您可以将console.log
放入then
和catch
,以查看执行顺序和await