【问题标题】:Returning Array from Python to Javascript将数组从 Python 返回到 Javascript
【发布时间】:2020-07-20 22:36:33
【问题描述】:

我试图将一组数据从 python 函数返回到 Javascript。我正在使用 eel python 模块。 python 函数很容易返回一个字符串,但是当我试图返回一个数组对象时,它什么也不返回给 javascript。

这里是python函数:

@eel.expose

def get_list_data(column_name):
    tree = ET.parse('resources.xml')
    root = tree.getroot()

    column_list_data = []

    for child in root.findall('column'):
        if child.get('name') == column_name:
            for grandchild in child:
                column_list_data.append(grandchild.text)
    return(column_list_data)

这里是javascript函数。

function getListData(){
    let retData = eel.get_list_data("Response")();
    console.log(retData);
}

getListData();

这是控制台日志显示。

Promise
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Array(0)

【问题讨论】:

  • 它似乎正在返回一个承诺。尝试在调用 JS 之前添加async 或使用Promise.resolve(...)new Promise() 语法。有很多方法可以在 JS 中解决 promise (stackoverflow.com/questions/26711243/…)
  • 仅将函数声明为像 async function getListData() 这样的异步函数是行不通的。您必须在异步承诺上使用 await ,这会使您的函数也异步,因此需要异步声明:let retData = await eel.get_list_data("Response")();

标签: javascript python-3.x eel


【解决方案1】:

也就是说,因为 retData 似乎是一个 Promise。请考虑阅读以下 (MDN Promise) 以更深入地了解 javascript 中的 Promise。

承诺是异步执行的。如果 promise 已成功解决,则会执行“then-callback”下面的代码。 给你一些开始:

function getListData(){
    let retData = eel.get_list_data("Response")()
       .then(retData => {
           console.log(retData);
       })
       .catch(e => console.log(e));
}

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 2021-06-08
    • 2019-12-05
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2012-04-13
    • 2013-03-29
    相关资源
    最近更新 更多