考虑这段代码

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));

10-08 13:07