react-admin:dataProvider抛出错误。它应该返回一个被拒绝的Promise-简单的解决方法?

问题描述 投票:1回答:1

这是我的自定义数据提供程序的getList函数

 getList: (resource, params) => {
        console.log('DataProvider.GetList ');
        console.log(resource);
        console.log(params);
        const { page, perPage } = params.pagination;
        const { field, order } = params.sort;
        const query = {
            ...fetchUtils.flattenObject(params.filter),
            _sort: field,
            _order: order,
            _start: (page - 1) * perPage,
            _end: page * perPage,
        };
        const url = `${getUrl(resource)}?${stringify(query)}`;
        const paging = supportsPaging(resource);

        return httpClient(url).then(
            ({ headers, json }) => {
                var result = [];

                // Implementierung von clientseitigem Paging & Filtering
                var filtered = applyFilter(json, params.filter);
                if (!paging) {
                    filtered=applyPagination(filtered, page, perPage);
                }
                else {
                    result = filtered;
                }

                return {
                    data: result,
                    total: json.length,  // Erfordert nun keinen speziellen Header mehr, CSE-Connect kompatibel
                };
            }, ({ reason }) => {

                console.log(reason);
            }).catch((e)=>{
                console.log(e);
            });
    }

在编辑表单中,我需要显示来自其他资源的相关记录。该关系有点怪异,需要字符串解析,所以我不能只使用内置的ReferenceField。这就是为什么我试图像这样直接调用dataProvider的getList函数:

const GetJobData = (params) => {
    let parms = { "pagination": { "page": 0, "perPage": 25 }, "sort": { "field": "id", "order": "ASC" }, "filter": {} };
    const { data, loading, error } = useGetList('jobs', parms);
    if (loading) { return <LinearProgress />; }
    if (error) { return <p>ERROR</p>; }
    return <p>{data}</p>;
};

这只是一个测试。由于调用会导致错误,因此尚未正确显示结果数据:

错误:dataProvider抛出错误。它应该返回被拒绝承诺吧。

我阅读了很多有关查询API的文档(https://marmelab.com/react-admin/Actions.html#specialized-hooks),但摆弄很多,但由于对Promise的了解有限,所以我失败了。

有简单的解决方法吗?

javascript reactjs react-admin
1个回答
0
投票

如果发生错误,您的dataProvider应该返回以下值:

import { HttpError } from 'react-admin'
...
return Promise.reject(new HttpError(message, status, body))
© www.soinside.com 2019 - 2024. All rights reserved.