У вас есть несколько проблем с вашим подходом.
Первый.AsyncStorage
хорошо асинхронно
AsyncStorage.setItem("@Project:comments", commentsResult.d);
console.log("finished setItem"); // not true
Вам нужно вернуть обещание, чтобы сохранить цепочку обещаний
.then(commentsResult => {
console.log("function setAllComments - before comments parse");
return AsyncStorage.setItem("@Project:comments", commentsResult.d);
})
.then(() => console.log("finished setItem");) // now it is more likely :)
Тогда .then(this.getComments());
вы немедленно вызываете функцию, должно быть
.then(() => this.getComments());
И, наконец, setState
также является асинхронным (но он не возвращает обещание).Поэтому вам нужно будет передать обратный вызов.
this.setState(
{ comments: commentsList },
() => console.log(this.state.comments, "getComments - Player with comments")
);
Также вы смешиваете async/await
с кучей then/catch
придерживайтесь одного подхода через ваш код (по крайней мере, внутри функции :))