1) promise関数を明示的に返す必要があります。状況がキャッチコールバック内で処理することができ失敗:
fetchDB(key) {
return AsyncStorage.getItem(key).catch(error => console.log(error));
}
fetchDB("username").then(res => alert(res));
2)ポイント(1)AsyncStorage.getItem
が本当に約束を返す場合にのみ機能します。それが真でない場合は、AsyncStorage.getItem
メソッドを約束ベースに更新する必要があります。あなたがそのメソッドにアクセスしていないか、それに触れることをしたくない場合は、問題は次のような方法でfetchDB
機能をアップデート経由でも行うことができます。)
fetchDB(key) {
return new Promise((resolve, reject) => {
try {
AsyncStorage.getItem(key, resolve);
}
catch (error) {
reject(error);
}
})
}
fetchDB("username")
.then(res => alert(res))
.catch(error => console.log(error));
3私も、あなたがドンと言うでしょう「Tはのtry-catchを必要とするため、ES6に自然を約束:最後.catch
はfetchDB
約束からスローされたすべてのエラーを処理
fetchDB(key) {
return new Promise((resolve, reject) =>
AsyncStorage.getItem(key, resolve)
)
}
fetchDB("username")
.then(res => alert(res))
.catch(error => console.log(error));
。
'AsyncStorage.getItem'は非同期ですか?とにかく、コールバック関数内の戻り値は、あなたが 'fetchDB'関数から何かを返すことを意味するわけではありません...あなたは2つの問題を持っています...非同期コードを理解し、関数が実際には何も返しません...単純に 'Return AsyncStorage.getItem(key);' –