Javascript 可能未处理的承诺拒绝。无法读取未定义的属性

Javascript 可能未处理的承诺拒绝。无法读取未定义的属性,javascript,promise,Javascript,Promise,我不熟悉函数式Javascript和承诺。下面的代码非常有效,直到我取消注释this.writeDataToRealm(data.data)。然后我得到这个错误: 可能未处理的承诺拒绝。无法读取未定义的属性“WriteDataOreAlm” 如何将数据发送到函数进行进一步处理 ... fetch(url, { method: 'GET', headers: { 'Accept': 'application/json', 'Content-Type': 'applicat

我不熟悉函数式Javascript和承诺。下面的代码非常有效,直到我取消注释this.writeDataToRealm(data.data)。然后我得到这个错误:

可能未处理的承诺拒绝。无法读取未定义的属性“WriteDataOreAlm”

如何将数据发送到函数进行进一步处理

...
 fetch(url, {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    Authorization: "Bearer " + token
  },
  }).then(function(response) {
    if (response.status !== 200) {
      throw Error(response.statusText);
    } else {
        return response.json().then(function(data) {
          console.log(data);
          return data.data;
        })
      }
    }).then(data => {
      this.writeDataToRealm(data.data)
    }, err => {
      console.log('Fetch Error: ', err);
    });

   }

   writeDataToRealm(data) {
    console.log(data[0]);
    realm.write(() => {
      realm.create('Student', {id: data[0].kp_ID, bb_first_name: data[0].kp_ID});
    });
  }

未处理的拒绝
是因为您忘记了
返回
然后
回调的内部承诺,这会导致异常不会冒泡到
捕获
处理程序:

.then(function(response) {
  if (response.status !== 200) {
    console.log('Error Status Code: ' + response.status);
    // you might want to `throw` here
  } else {
    return response.json().then(function(data) {
      console.log(data);
      return data.data;
    })
  }
});

无法读取未定义的
的属性“WriteDataOreAlm”的问题是由
不是您期望的实例引起的-请参阅。最简单的解决方案是使用arrow函数进行回调

…
.then(data => {
  this.writeDataToRealm(data)
}, err => {
  console.log('Fetch Error: ', err);
});

未处理的拒绝
是因为您忘记了
返回
然后
回调的内部承诺,这会导致异常不会冒泡到
捕获
处理程序:

.then(function(response) {
  if (response.status !== 200) {
    console.log('Error Status Code: ' + response.status);
    // you might want to `throw` here
  } else {
    return response.json().then(function(data) {
      console.log(data);
      return data.data;
    })
  }
});

无法读取未定义的
的属性“WriteDataOreAlm”的问题是由
不是您期望的实例引起的-请参阅。最简单的解决方案是使用arrow函数进行回调

…
.then(data => {
  this.writeDataToRealm(data)
}, err => {
  console.log('Fetch Error: ', err);
});

我编辑了我的原始代码以反映您所建议的更改。但是,我仍然收到相同的错误:可能的未处理承诺拒绝(id:12):无法读取未定义类型的属性“0”错误:无法读取Database.writeDataToRealm(/app/classes/Database.map?platform=ios&runModule=false&entryModuleOnly=true&hot=true:89:23)上未定义类型的属性“0”)(/app/classes/Database.map?这是另一个错误,因为现在它正在成功调用
writeDataToRealm
方法。我想我是用一个
调用它的。数据
属性访问太多了,虽然谢谢,但我不确定你所说的“猜我是用一个调用它的。数据属性访问太多了”是什么意思。我该如何解决这个问题?@AdamG我是说。啊,明白了!谢谢你的帮助,现在工作得很好!我编辑了原始代码以反映你所建议的更改。但是,我仍然收到相同的错误:可能未经处理的承诺被拒绝(id:12):无法读取未定义类型的属性“0”错误:无法在评估时读取Database.writeDataToRealm(/app/classes/Database.map?platform=ios&runModule=false&entryModuleOnly=true&hot=true:89:23)处未定义类型的属性“0”(/app/classes/Database.map?这是另一个错误,因为现在它正在成功调用
writeDataToRealm
方法。我想我是用一个
调用它的。数据
属性访问太多了,虽然谢谢,但我不确定你所说的“猜我是用一个调用它的。数据属性访问太多了”是什么意思.我该怎么解决这个问题呢?@AdamG我是说。啊,明白了!谢谢你的帮助,现在效果很好!