首页 > 解决方案 > 如果有任何失败,则取消获取链

问题描述

我正在研究一个元素,该元素从用户那里得到一个 csv 文件,获取命令行(添加、重命名、更新、删除不同的项目)并在命令正确和合法的基础上将它们执行到数据库中。

目前,我尝试在执行每个命令之前对其进行验证,但我无法捕捉到每一个错误,比如他们在添加成分时出现拼写错误,然后尝试在后面的行中通过其正确名称引用该成分。因此,某些命令将尝试执行并失败。有没有办法“模拟调用”每个命令以确保它们在实际执行每个命令之前工作?

目前,所有命令都在此函数中执行,如果任何命令未能执行(目前),我将返回 true 或 false,这会将状态设置为显示成功消息或不显示成功消息。

try {
    const { categories } = await fetchCategories();
    let results = await sheetData.reduce(async (accum: any, ingredient: any) => {
        let updateArray = await accum;
        // console.log(`>>> ${ingredient.command} ${ingredient.name}`)
        updateArray.push(await buildExecute(ingredient, categories));
        // console.log(`<<< ${ingredient.command} ${ingredient.name}`)
        return updateArray;
    }, Promise.resolve([]));

    const result = await Promise.all(results);
    return !result.some(val => val === false)
} catch (err) {
    return false;
}

在内部buildExecute,我只是构建要调用的端点、要包含在正文中的数据以及获取方法本身

try {
    const { result, error } = await (await fetch(endpoint, {
        method: method,
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(data),
    })).json();
    if (error) {
        console.error(error);
        return false;
    }
    return true;
} catch (err) {
    console.error(err);
    return false;
}

如果有一个库可以满足我的需求,我会尝试一下,或者如果有内置的方法,那也可以。

标签: javascriptreactjsasync-awaitfetch-api

解决方案


推荐阅读