2017-02-23 65 views
2

我正在做一個函數,檢查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

解析爲一個字符串'的console.log(「形象:」執行的順序+ JSON.stringify (image))' –

+2

如果你問我的話,有點期待輸出... – KarelG

+1

異步函數總是返回一個承諾。 – Lux

回答

0

異步函數返回一個承諾,所以您應該使用.then來獲取承諾返回的值。請參見下面修改後的代碼:

var image; 

this.checkImage(imageUrl).then((bool) => { 
    console.log('image: ' + bool); 
} 

async checkImage(image){ 
    var a; 
    await RNFetchBlob.fetch('GET', image) 
    .then((res) => { 
    a = true; 
    }) 
    .catch((errorMessage, statusCode) => { 
    a = false; 
    }) 

    console.log(a); 
    return a; 
} 
0

Async functions return Promises,從而你image變量是一個承諾。處理它是這樣:

this.checkImage(imageUrl).then(function (image) { 
    console.log(image) 
}) 

在我的瀏覽器,Promise.resolve(value).toString()回報'[object Promise]',而不是像你描述'[object Object]',但我相信,無論無極實施的基本問題仍然是相同的。

作爲一個方面說明,我認爲異步函數應聲明爲async function name() {}而不是async name() {}

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; 
} 
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; 
    } 
} 

你可以把thenconsole.logcatch看到它們有沒有它,await