Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点芹菜客户端调用(';任务';)从未执行/完成?_Javascript_Node.js_Celery_Celery Task_Node Celery - Fatal编程技术网

Javascript 节点芹菜客户端调用(';任务';)从未执行/完成?

Javascript 节点芹菜客户端调用(';任务';)从未执行/完成?,javascript,node.js,celery,celery-task,node-celery,Javascript,Node.js,Celery,Celery Task,Node Celery,我是个新来的节点芹菜,我正试图通过从芹菜任务中得到一个结果来简单地开始。我已经用“等待”的方式写了我的JS,以便等待芹菜的结果,然后继续前进,然而,JS似乎从未从“client.call('task')得到结果 芹菜编码: @app.task(base=QueueOnce) def add(x, y): return x + y 节点JS代码: async function addCelery() { client = celery.createClient({

我是个新来的节点芹菜,我正试图通过从芹菜任务中得到一个结果来简单地开始。我已经用“等待”的方式写了我的JS,以便等待芹菜的结果,然后继续前进,然而,JS似乎从未从“client.call('task')得到结果

芹菜编码:

@app.task(base=QueueOnce)
def add(x, y):
    return x + y
节点JS代码:

async function addCelery() {
    client = celery.createClient({
        CELERY_BROKER_URL: "redis://myurl.com:0000"
    });

    let clientResult = new Promise((resolve, reject) => {
        console.log("Log 1");                    //This shows in the console
        client.on('connect', () => {
            console.log("Log 2");                //This also shows in console, making me believe it connected successfully
            var call = client.call('tasks.add', [1,2]); //Call task
            console.log("Log 3");                //This also shows in console, making me believe the task call is called successfully              
            call.on('ready', function(result){   //When call gets result
                console.log(result);             //Never gets here
            });
        });
    })
    await clientResult;
    console.log('done');       //Never gets here
我不太清楚为什么它从来没有通过电话,从来没有得到一个结果。我用于调试的许多console.log()使我相信它正在成功地连接和调用任务


它不是和芹菜相连吗?我把这个任务称为错误吗?这不应该是一个时间问题,因为我已经执行了这个,等待了10分钟仍然没有结果。我对这一点非常陌生,因此如果您在创建的承诺中从未调用过
解决
拒绝
,我们将非常感谢您提供的任何帮助

此外,根据您在注释中链接的页面上的示例,您应该将回调函数作为参数提供给
client.call
,如下所示:

client.call('tasks.add',[1,2],resolve)
resolve
与回调具有相同的签名,因此您可以直接传递它)

编辑:为什么
result.on('ready',fn)
不起作用?
因为您使用的是Redis后端。这只适用于AMQP后端。

什么是
var client.call('tasks.add',[1,2])?这不需要解析;另外,在哪里定义了
call
,对于
call.on
?client.call()是文档中显示的调用任务的内容,请参见此处的“后端”部分:。你能进一步解释一下“不解析”是什么意思吗?我的代码中也定义了“call”,我刚刚更新了上面的示例以反映that@ChristianFritz^现在您已经编辑了代码,它会再次解析(这不是有效的js语法,
var client.call(…)
)。您没有调用
resolve
reject
是对的。但并非该页面上的所有示例都使用回调函数作为
client.call
的参数。“后端”部分中的最后一个示例与OP的代码非常相似。OP没有使用AMQP后端。在该示例的正上方,它表示
AMQP backend允许订阅任务结果并立即获取,而无需轮询:
将此添加到了答案中。本来应该包括在内的。