2017-02-23 18 views
2

私は、URLにイメージがあることを確認する関数を作成しています。成功するとtrueかfalseを返す必要があります。関数はbooleanの代わりにオブジェクトを返します

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);戻りオールライト働く真または偽ので、しかしconsole.log('image: ' + image);戻り[object Object]

あなたは私のコードで間違っているかを把握することはできますか?

+0

せずに文字列 'はconsole.log(「イメージ」にそれを解析するthencatchconsole.logを置くことができます(画像)) ' –

+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 name() {}ではなくasync function 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

ここでの問題は、それ以外の場合は、すぐに約束を返し、あなたはcheckImageへの呼び出しをawaitしなければならないということです。 + JSON.stringify:

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

あなたは彼らがで実行される順序を参照してawait

関連する問題