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

我在我的 React Native 应用程序中将两个 Promise 链接在一起时遇到了很多麻烦。第一个 Promise 成功获取异步存储中的值并将其设置为状态。第二个 Promise 获取我从 Firebase 获得的数据,但取决于我从第一个 Promise 设置的状态。任何帮助将不胜感激。


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;

http://img.mukewang.com/64b0ab9a0001e72806530195.jpg

慕森卡
浏览 130回答 1
1回答

潇湘沐

试试这个方法useEffect(() => {&nbsp; getAsyncData();}, []);const getAsyncData = async () => {&nbsp; try {&nbsp; &nbsp; const productId = await AsyncStorage.getItem("key");&nbsp; &nbsp; getDataFromFirebase(productId);&nbsp; } catch (error) {&nbsp; &nbsp; console.log(error);&nbsp; }};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript