使用axios的多个请求,而不必等待它们在数组列表中完成?

时间:2018-11-11 01:14:31

标签: javascript node.js axios

taskList.push(
    const data = {
        url: 'http://${requestUrl}?${argsString}',
        headers: {
            'Content-Type': 'application/octet-stream',
            Authorization: signature //,
            //'Content-Length': buffer.length
        },
        method: 'POST',
        data: buffer
    }
            return axios(data)
        )

try {
        const data = await Promise.all(taskList)
        const res = data.map(d => d.data)
        console.log(res)
        //ctx.state.data = res
    } catch (e) {
        console.log(e)
        throw e
    }

如何不等待所有请求完成,因为所有完成都需要太长时间。如果有任何请求完成,我将其打印出来,这对用户来说将非常快。

2 个答案:

答案 0 :(得分:2)

如果每个响应都应在完成后立即记录下来,则应为:

const responses = await Promise.all(taskList.map(async task => {
  const { data } = await task;
  console.log(data);
  return data;
}));

答案 1 :(得分:1)

要运行每个Promise,只需将一个<DataTemplate x:Key="LoginTemplate"> <views:LoginView/> </DataTemplate> <DataTemplate x:Key="ChatTemplate"> <views:ChatView/> </DataTemplate> <Style x:Key="ChatContentStyle" TargetType="ContentControl"> <Setter Property="ContentTemplate" Value="{StaticResource LoginTemplate}"/> <Style.Triggers> <DataTrigger Binding="{Binding UserMode}" Value="{x:Static enums:UserModes.Chat}"> <Setter Property="ContentTemplate" Value="{StaticResource ChatTemplate}"/> </DataTrigger> </Style.Triggers> </Style> 添加到每个.then()Promise.all中,但是之后将无法.map数据:

try {
    const data = Promise.all(taskList).then(() => console.log('finished'));
    // this will not wait to run, so data will be probably undefined
    const res = data.map(d => d.data)
    ...

所以我建议遵循模式并等待它们完成。

如果花费的时间太长,则可能的话,您应该尝试提高后端的响应性能。