node-celery client.call('task') 从不执行/完成?



我是节点芹菜的新手,正试图通过从芹菜任务中获得结果来开始简单的工作。我以"等待"的方式编写了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分钟仍然没有结果。我对此很陌生,所以任何帮助都将不胜感激

您从未在创建的Promise中调用过resolvereject

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

client.call('tasks.add', [1, 2], resolve)

(resolve与回调具有相同的签名,因此可以直接传递(

编辑:为什么result.on('ready', fn)不起作用

因为您使用的是Redis后端。这只适用于AMQP后端。

相关内容

  • 没有找到相关文章

最新更新