我是节点芹菜的新手,正试图通过从芹菜任务中获得结果来开始简单的工作。我以"等待"的方式编写了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中调用过resolve
或reject
。
此外,根据您在注释中链接的页面上的示例,您应该提供回调函数作为client.call
的参数,如下所示:
client.call('tasks.add', [1, 2], resolve)
(resolve
与回调具有相同的签名,因此可以直接传递(
编辑:为什么result.on('ready', fn)
不起作用
因为您使用的是Redis后端。这只适用于AMQP后端。