考虑这段代码
const response = await fetch('<my url>');
const responseJson = await response.json();
responseJson = _.sortBy(responseJson, "number");
responseJson[0] = await addEnabledProperty(responseJson[0]);
addEnabledProperty
所做的是通过添加enabled
属性来扩展对象,但这并不重要。该功能本身运行良好async function addEnabledProperty (channel){
const channelId = channel.id;
const stored_status = await AsyncStorage.getItem(`ChannelIsEnabled:${channelId}`);
let boolean_status = false;
if (stored_status == null) {
boolean_status = true;
} else {
boolean_status = (stored_status == 'true');
}
return _.extend({}, channel, { enabled: boolean_status });
}
是否可以使用
_.map
(或其他系统)来遍历整个responseJson数组,以便对每个元素使用addEnabledProperty
? 我试过了:
responseJson = _.map(responseJson, function(channel) {
return addEnabledProperty(channell);
});
但是它没有使用异步,所以它冻结了应用程序。
我试过了:
responseJson = _.map(responseJson, function(channel) {
return await addEnabledProperty(chanell);
});
但是我遇到了一个js错误(关于
return await addEnabledProperty(chanell);
行)然后尝试
responseJson = _.map(responseJson, async function(channel) {
return await addEnabledProperty(channell);
});
但是我有很多 promise ...我不明白为什么...
还有什么!??
编辑:我了解您的提示,因为我没有指定
addEnabledProperty()
返回Promise
,但实际上,我不知道。实际上,我写了“我有各种各样的 promise ……但我不明白为什么” 最佳答案
要并行处理响应json,可以使用Promise.all
:
const responseJson = await response.json();
responseJson = _.sortBy(responseJson, "number");
let result = await Promise.all(_.map(responseJson, async (json) =>
await addEnabledProperty(json))
);
由于
addEnabledProperty
方法是异步的,因此以下内容也应工作(每个@CRice):let result = await Promise.all(_.map(responseJson, addEnabledProperty));