微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node-celery client.call('task') 从不执行/完成? 编辑:为什么 resolve 不起作用?

如何解决node-celery client.call('task') 从不执行/完成? 编辑:为什么 resolve 不起作用?

我是 node-celery 的新手,我试图通过从 celery 任务中获取结果来开始简单。我已经以“等待”的方式编写了我的 JS,以便等待 celery 的结果然后继续前进,但是,似乎 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() 让我相信它已成功连接并调用任务

是不是连接到了celery?我调用任务错了吗?这不应该是一个时间问题,因为我已经执行了这个并等待了 10 分钟仍然没有结果。我对此很陌生,因此将不胜感激

解决方法

您从未在您创建的 Promise 中调用 public class UserModelValidator : AbstractValidator<UserModel> { public UserModelValidator(IActionContextAccessor actionContextAccessor) { RuleFor(item => item.Username) .MustAsync(async (context,username,propertyValidatorContext,cancellationToken) => { var userId = (string)actionContextAccessor.ActionContext.RouteData.Values .Where(o => o.Key == "userId") .Select(o => o.Value) .FirstOrDefault(); return true; }); } } resolve

此外,根据您在评论中链接的页面上的示例,您应该提供回调函数作为 reject 的参数,如下所示:

client.call

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

编辑:为什么 resolve 不起作用?

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。