首页 > 解决方案 > 如果超过 50 行,Xamarin Forms 在节点后端上拉异步失败

问题描述

从 Xamarin Forms 跨平台应用程序在 Node.JS 后端上运行 PullAsync 时,如果表最多有 50 行,则调用成功。

 public async Task Sync<T>()
        {
            if (!CrossConnectivity.Current.IsConnected) { return; }
            var table = Client.GetSyncTable<T>();

            if (Client.SyncContext.IsInitialized)
            {
                await table.PullAsync(null, table.CreateQuery());
            }
        }

PullAsync 似乎添加了 Skip(0) 和 Take(50)。如果我调用一个超过 50 个的表,即使我table.maxTop = 100;在节点表定义中指定了,应用程序也会出错

Error:An error occurred while sending the request

而 innerException 是

{System.Net.WebException: Error: ConnectFailure (Connection timed out) ---> System.Net.Sockets.SocketException: Connection timed out.....

但我认为这是由于我添加 maxTop = 100 的节点端出现错误。我是否缺少任何明显的信息,我需要一次检索超过 50 行?

我读了这篇文章,其中详细介绍了类似的东西,查询一个天蓝色的表,但我想在使用 PullAsync 时这样做。

更新:

好的,我认为正在发生的事情是这样的,

如果我有多达 50 行,一切都很好。

超过 50 个,我认为第一个查询将使用 skip(0)、take(50) 运行。

它将使用 skip(50) take (50) 再次运行,并且每次都会增加跳过总数,直到没有更多行要处理。

似乎,虽然这是它应该表现的方式,但在第 50 次之后它实际上并没有成功

标签: c#node.jsxamarin.forms

解决方案


找到了答案。

更换线路

await table.PullAsync(null, table.CreateQuery());

        var query = table.CreateQuery().Skip(0).Take(1000);
        var pullOptions = new PullOptions() { MaxPageSize = 5000 };
        await table.PullAsync(null, query, pullOptions);

成功了


推荐阅读