Javascript 链接承诺,其中第二个承诺取决于第一个承诺的结果
在react原生应用程序中,我很难将两个承诺链接在一起。第一个承诺成功地在异步存储中获取一个值并将其设置为状态。第二个承诺获取我从Firebase获得的数据,但取决于我从第一个承诺设置的状态。任何帮助都将不胜感激Javascript 链接承诺,其中第二个承诺取决于第一个承诺的结果,javascript,reactjs,firebase,react-native,promise,Javascript,Reactjs,Firebase,React Native,Promise,在react原生应用程序中,我很难将两个承诺链接在一起。第一个承诺成功地在异步存储中获取一个值并将其设置为状态。第二个承诺获取我从Firebase获得的数据,但取决于我从第一个承诺设置的状态。任何帮助都将不胜感激 import React, { useState, useEffect } from "react"; import { Text, StyleSheet, View } from "react-native"; import firebase
import React, { useState, useEffect } from "react";
import { Text, StyleSheet, View } from "react-native";
import firebase from "../../firebase/fbConfig";
import AsyncStorage from "@react-native-async-storage/async-storage";
let DB = firebase.firestore();
function Questions(props) {
const [productId, setProductId] = useState("");
const [question, setQuestion] = useState("");
const [reward, setReward] = useState("");
const getAsyncData = () => {
AsyncStorage.getItem("key").then((value) => setProductId(value))
// works fine //
};
const getDataFromFirebase = (productId) => {
DB.collection("ads")
.where("productId", "==", productId)
.get()
.then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
setQuestion(doc.data().question);
setReward(doc.data().reward);
});
})
.catch(function (error) {
console.log("Error getting documents: ", error);
});
// works fine //
};
useEffect(() => {
getAsyncData().then((productId) => getDataFromFirebase(productId));
// does not work //
});
return (
<>
<View style={styles.container}>
</View>
</>
);
}
export default Questions;
import React,{useState,useffect}来自“React”;
从“react native”导入{Text,StyleSheet,View};
从“../../firebase/fbConfig”导入firebase;
从“@react native async storage/async storage”导入异步存储;
设DB=firebase.firestore();
功能问题(道具){
const[productId,setProductId]=useState(“”);
const[question,setQuestion]=useState(“”);
const[奖励,设置奖励]=使用状态(“”);
常量getAsyncData=()=>{
AsyncStorage.getItem(“key”)。然后((值)=>setProductId(值))
//很好//
};
const getDataFromFirebase=(productId)=>{
数据库收集(“ads”)
.where(“productId”,“==”,productId)
.get()
.then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
设置问题(doc.data().question);
设置奖励(doc.data().raward);
});
})
.catch(函数(错误){
log(“获取文档时出错:”,错误);
});
//很好//
};
useffect(()=>{
getAsyncData()。然后((productId)=>getDataFromFirebase(productId));
//不起作用//
});
返回(
);
}
导出默认问题;
试试这种方法
useEffect(() => {
getAsyncData();
}, []);
const getAsyncData = async () => {
try {
const productId = await AsyncStorage.getItem("key");
getDataFromFirebase(productId);
} catch (error) {
console.log(error);
}
};
您的问题是
getAsyncData
没有返回任何内容。。。尝试constgetAsyncData=()=>{return AsyncStorage.getItem(“key”)。然后((value)=>setProductId(value));}代码>或常量getAsyncData=()=>AsyncStorage.getItem(“键”)。然后((值)=>setProductId(值))代码>这对我有用!我也有一个类型错误,但最终还是成功了