Javascript 节点芹菜客户端调用(';任务';)从未执行/完成?
我是个新来的节点芹菜,我正试图通过从芹菜任务中得到一个结果来简单地开始。我已经用“等待”的方式写了我的JS,以便等待芹菜的结果,然后继续前进,然而,JS似乎从未从“client.call('task')得到结果 芹菜编码: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({
@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允许订阅任务结果并立即获取,而无需轮询:
将此添加到了答案中。本来应该包括在内的。