Javascript 如何在ag网格中从valueFormatter调用异步函数

Javascript 如何在ag网格中从valueFormatter调用异步函数,javascript,async-await,ag-grid,Javascript,Async Await,Ag Grid,我有一个ag网格表,其中有一列带有值格式化程序: { headerName: "My column", valueFormatter: getFormattedIndexValue, ... } 从getFormattedIndexValue我尝试调用异步函数: async function getFormattedIndexValue (params) { if (!params.value) return; return await getDecod

我有一个ag网格表,其中有一列带有值格式化程序:

{
    headerName: "My column",
    valueFormatter: getFormattedIndexValue,
    ...
}
getFormattedIndexValue
我尝试调用异步函数:

async function getFormattedIndexValue (params) {
    if (!params.value) return;
    return await getDecodedValue(table, params.colDef.field, params.value);
}
这是异步函数的代码,我尝试调用:

async function getDecodedValue(table, field, value) {
    const query = `function=decode&table=${table}&field=${field}&value=${value}`;
    const response = await fetch('routines.php', { method: 'post', body: query, headers: {"Content-Type": "application/x-www-form-urlencoded"}});
    return response.text();
}

但这样valueFormatter就不会返回正确的值,从而导致
[对象承诺]
。有没有一种方法可以从valueFormatter调用异步函数并获得正确的结果

valueFormatter
不适合它,但是,您可以创建
cellRenderer
,这样您就能够处理内部所需的逻辑

但正如我所理解的,您希望有某种引用(数据库上的键到值、id(作为键)和视图网格上的值(作为显示值)——对吗

如果是,则应使用(
valueFormatter
valueParser
)但不使用异步调用, 您需要在grid init进程上拥有键值对(字典)

以下是我的例子:

在ag grid init进程中,我正在为
config.ComboData


valueFormatter
params.value
-在ag网格渲染值时使用

valueParser
params.newValue
-更新单元格值时

这里是
looupValue
lookupKey
函数和


valueFormatter
不适合它,但是您可以创建
cellRenderer
,这样您就可以在内部处理所需的逻辑

但正如我所理解的,您希望有某种引用(数据库上的键到值、id(作为键)和视图网格上的值(作为显示值)——对吗

如果是,则应使用(
valueFormatter
valueParser
)但不使用异步调用, 您需要在grid init进程上拥有键值对(字典)

以下是我的例子:

在ag grid init进程中,我正在为
config.ComboData


valueFormatter
params.value
-在ag网格渲染值时使用

valueParser
params.newValue
-更新单元格值时

这里是
looupValue
lookupKey
函数和


我明白了,现在我使用映射,使用PHP从DB创建它们,但是我的表是动态创建的,非常复杂,这些映射在项目中成为垃圾。此外,如果我想从中加入另一个表,我需要打印额外的映射。单元渲染器不会有用,因为过滤器中的ID是以这种方式渲染的,而不是名称(即,1=>'BILLA',2=>'SPAR',3=>'L'etoile',…,对于单元渲染器,1,2,3在过滤器中,但未清除存储names@PavelSumarokov你在重复问题,试着一个接一个地解决它们,并在每篇文章中创建一个问题,因为在这里你混合了一些问题,我无法确定你想解决哪一个问题。我明白了,现在我使用mapp但是我的表是动态创建的,而且非常复杂,这些映射会在项目中成为垃圾。此外,如果我想从中加入另一个表,我需要打印额外的映射。单元格渲染器将不会有用,因为过滤器中的ID是以这种方式呈现的,而不是名称(即,1=>'BILLA',2=>'SPAR',3=>'L'etoile',…,对于单元渲染器,1,2,3在过滤器中,但未清除存储names@PavelSumarokov你在重复问题,试着一个接一个地解决它们,并在每篇文章中创建一个问题,因为在这里你混合了几个问题,我无法确定你要解决的是哪一个。
valueFormatter = (params) => {
    return this.lookupValue(config.ComboData['columnNameHere'], params.value);
};
valueParser = (params) => {
     return this.lookupKey(config.ComboData['columnNameHere'], params.newValue);
}
lookupValue(mappings, key:string) {
    return mappings[key];
}

lookupKey(mappings, name) {
    for (var key in mappings) {
        if (mappings.hasOwnProperty(key)) {
            if (name === mappings[key]) {
            return key;
            }
        }
    }
}