gpt4 book ai didi

javascript - 在 Javascript 中更新不可变数据并返回 Promise

转载 作者:行者123 更新时间:2023-12-03 05:31:40 25 4
gpt4 key购买 nike

因此,我正在使用不可变对象(immutable对象)构建 React-Redux 应用程序,并且需要使用从 API 端点获取的一些数据来更新我的状态。

这是我添加数据之前的状态结构

    const state = fromJS({
tickers: ['AAPL', 'TSLA', 'GOOGL'],
data: {
AAPL: Map(),
TSLA: Map(),
GOOGL: Map()
}
});

这个想法是,我获取的数据进入数据对象中各自的股票代码键

这是我尝试获取数据并更新它的代码

export function requestAPIData(state, tickerArray){
return dispatch => {
return yahooFinance.historical({
symbols: tickerArray,
from: '2012-01-01',
to: '2012-01-05',
period: 'd'
}, (err, quotes) => {
throw new Error('err');
}).then(result => {
addDataToKeysFunction(state, result);
}).then(() => {
console.log(state);
dispatch(success());
})
}

}

function addDataToKeysFunction(state, data){
return new Promise ((resolve, reject) => {
for(let key in data){
console.log(data[key]);
state.setIn(['data', key], data[key]);
}
resolve();
})
}

所以,这就是让我困惑的地方。如果我只是在状态对象上调用 state.setIn,它只会暂时更新,因为不可变对象(immutable对象)在返回状态之前不会更新(?)。但是,我还返回一个需要解决或拒绝的 promise 。我如何确保状态得到更新并解决 promise 。

我对处理不可变数据结构还比较陌生,所以如果我遗漏了一些明显的东西,请指出。另外,如果使用回调是完成此操作的唯一方法,那也很好。

最佳答案

好吧,我找到了答案。由于某种原因,将数据作为 Promise 调用的resolve() 的一部分返回会引发错误,但在回调中返回它却可以正常工作。

export function requestAPIData(state, tickerArray){
return dispatch => {
return yahooFinance.historical({
symbols: tickerArray,
from: '2012-01-01',
to: '2012-01-05',
period: 'd'
}, (err, quotes) => {
throw new Error('err');
}).then(result => {
addDataToKeysFunction(state, result, function(return_data){
console.log(return_data);
});
})
}

}

function addDataToKeysFunction(state, data, done){
let new_state = state;
for(let key in data){
new_state = state.setIn(['data', key], data[key]);
state = state.merge(new_state);
}
done(state);
}

关于javascript - 在 Javascript 中更新不可变数据并返回 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com