函数返回对象而不是布尔值

时间:2017-02-23 08:30:47

标签: javascript reactjs react-native

我正在创建一个函数来检查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]

你能弄明白我的代码有什么问题吗?

3 个答案:

答案 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放入thencatch,以查看执行顺序和await