Javascript 链接承诺,其中第二个承诺取决于第一个承诺的结果

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

在react原生应用程序中,我很难将两个承诺链接在一起。第一个承诺成功地在异步存储中获取一个值并将其设置为状态。第二个承诺获取我从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(值))这对我有用!我也有一个类型错误,但最终还是成功了