【问题标题】:Meteor.publish with call to an async function returning errorMeteor.publish 调用异步函数返回错误
【发布时间】:2021-06-07 22:47:22
【问题描述】:

我正在尝试为 Meteor.publish 创建一个包装器方法,在实际调用它之前进行访问检查。

访问检查由 async-await 方法表示,如果我将包装器方法转换为异步方法,则在运行它时会导致包装器函数出现以下错误。

来自 sub alerts.notAcknowledged id 2 的异常错误:发布函数 只能返回一个游标或游标数组 Subscription._publishHandlerResult (packages/ddp-server/livedata_server.js:1132:18)

如果我从包装方法中删除 async 关键字并注释掉对 async-await 方法的调用,则包装方法按预期工作。

【问题讨论】:

  • 如果您的解决方案有效,您可以回答自己的问题,而不是将解决方案放在问题中。
  • 已编辑。谢谢!

标签: javascript typescript meteor async-await


【解决方案1】:

我没有找到任何答案来解决我的问题,但是在检查了几个解决方案并尝试之后,我得到了以下解决方案:

export const wrapperPublish = (metadata: any, callback: Function) => {
     Meteor.publish(metadata.name, (params: LooseObject) => {

        const allowAccessSync = Meteor.wrapAsync(allowAccess);
        const { error, hasAccess } = MeteorPromise.await(allowAccessSync({
                                     token: params.token,
                                     methodName: params.methodName,
                                     }, () => {}));
        check(params, metadata.checks);
        if (!hasAccess) {
            // do something 
        }

        return callback(params);
    });
};

在上面的代码 sn-p 中,allowAccess 表示返回 Promise 的函数,解决方案是 Meteor.wrapAsync,它将异步函数转换为方便的同步函数。 https://docs.meteor.com/api/core.html#Meteor-wrapAsync

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2019-09-30
  • 2018-01-03
  • 2019-09-29
  • 1970-01-01
  • 2022-12-22
  • 2021-12-19
相关资源
最近更新 更多