簡體   English   中英

從函數返回多個值並在 promise 中分配返回值時遇到問題

[英]Having trouble returning more than one value from a function and assigning the returned values in a promise

我有一個返回兩個值的函數。 我正在嘗試返回數組中的值。

export function getSettingsConfig (selectedSetting, formSchema) {
    debugger;
        //gets selected setting config
        fetch(`/ui/settings/${selectedSetting}`, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json',
                'Accept': '*/*'
            },
        })
            .then(response => response.json())
            .then(response => {
                //maps config to form schema
                let settingsConfig = response.data;
                let newFormSchema = setNonDefaultFieldValues(settingsConfig, formSchema);
                    return [settingsConfig, newFormSchema]
            })
            .catch((err) => {
                /* Todo - add better error handling here. */
                console.log('Fetch Error :-S', err);
            })
    };

在我的componentDidMount() ,我調用了getSettingsConfig函數並嘗試將返回的值分配給一個名為values的數組。

componentDidMount() {
        let general = {};
        let values = [];

        //gets selected setting form schema
        getSettingsForms().then((response) => {
            this.setState({settingsForms: response});
            general = response[this.state.selectedSetting];
        }).then(response => {
            values = getSettingsConfig(this.state.selectedSetting, general);
            console.log(values);
        })
    }

當我嘗試console.log()這個返回值數組到控制台時,我得到undefined 知道我在我的功能中做錯了什么嗎? 為什么不返回值數組?

您必須使用 async await 等待承諾得到解決,然后使用變量值

您可以使用asyncawait解決您的問題

async componentDidMount() {
    let general = {};
    let values = [];

    const response  = await getSettingsForms()

    general = response[this.state.selectedSetting]
    values = getSettingsConfig(this.state.selectedSetting, general)
}

您必須在getSettingsConfig中返回 promise 才能通過調用它來獲取其結果。

// ...
return fetch(`/ui/settings/${selectedSetting}`, {
// ...

您還必須解決承諾:

// ...
      getSettingsForms().then((response) => {
          this.setState({settingsForms: response});
          general = response[this.state.selectedSetting];
          // resolve the promise here
          getSettingsConfig(this.state.selectedSetting, general).then((values) => {
            console.log(values);
          });
      });
// ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM