You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D响应式编程:Observable.WhenAll如何传入可变数量Observable?

如何在Observable.WhenAll()中使用可变数量的Observable

当然可以!Observable.WhenAll()其实提供了支持可变数量Observable的重载版本,完全能满足你处理动态URL列表的需求,不用局限于固定数量的参数传入。

实现步骤

核心思路是先把你的URL列表转换成对应的Observable集合,再将这个集合传入WhenAll():

  1. 将URL列表映射为Observable序列:使用LINQ的Select方法,遍历每个URL,生成对应的ObservableWWW.Get()请求。
  2. 传入WhenAll():直接把这个Observable集合传给WhenAll()即可。

完整代码示例

using System.Collections.Generic;
using System.Linq;
using UniRx;
using UnityEngine;

public class DynamicRequestsExample : MonoBehaviour
{
    void Start()
    {
        List<string> URLs = new List<string>();
        URLs.Add("http://google.com/");
        URLs.Add("http://bing.com/");
        // 可以根据业务需求动态添加更多URL
        URLs.Add("http://unity3d.com/");

        // 把每个URL转换成对应的Observable网络请求
        var requestObservables = URLs.Select(url => ObservableWWW.Get(url));

        // 传入可变数量的Observable到WhenAll,等待所有请求完成
        var parallelRequests = Observable.WhenAll(requestObservables);

        // 订阅请求结果
        parallelRequests.Subscribe(
            results => 
            {
                // results数组的顺序和原始URL列表的顺序完全一致
                for (int i = 0; i < results.Length; i++)
                {
                    Debug.Log($"URL [{URLs[i]}] 的返回结果:\n{results[i]}");
                }
            },
            error => 
            {
                // 只要有一个请求失败,就会立即触发这个错误回调
                Debug.LogError($"请求出错:{error.Message}");
            }
        );
    }
}

额外注意事项

  • 结果顺序保证:WhenAll()返回的结果数组顺序,和你传入的Observable集合的顺序完全对应,不用担心结果和URL匹配不上。
  • 容错处理:默认情况下,只要任意一个Observable触发错误,WhenAll()会立即终止并触发错误回调。如果需要容错(比如某个请求失败不影响其他请求),可以给单个Observable添加Catch操作,示例如下:
    var requestObservables = URLs.Select(url => 
        ObservableWWW.Get(url)
            .Catch((System.Exception ex) => 
            {
                Debug.LogWarning($"URL [{url}] 请求失败:{ex.Message}");
                return Observable.Return(string.Empty); // 返回默认值让整体流程继续执行
            })
    );
    

内容的提问来源于stack exchange,提问作者오명근

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:33:32