gpt4 book ai didi

javascript - 我的异步包装 Meteor 包有问题

转载 作者:行者123 更新时间:2023-11-30 17:18:51 25 4
gpt4 key购买 nike

我正在尝试编写我的第一个 Meteor 智能包,但遇到了一个问题。

我正在尝试编写一个包装以下 node.js 模块的包: https://github.com/dmcquay/node-apac

有人建议我在这样做时,应该使用 Meteor._wrapAsync 包装 OperationHelper.execute() 方法,以避免在未来的项目中使用它时出现回调 hell 。

我的包中目前有以下代码:

apac = Npm.require("apac");
OperationHelper = apac.OperationHelper;

function makeSyncMethod(method){
var wrapped=Meteor._wrapAsync(method);
var syncMethod=function(){
return wrapped.apply(this,arguments);
};
return syncMethod;
}

OperationHelper.prototype.executeSync = makeSyncMethod(OperationHelper.prototype.execute);

它似乎按照预期的方式扩展了原型(prototype)(我认为),但是当我使用以下代码调用它时(我刚刚创建了一个准系统 Meteor 项目,添加了我的包,仅此而已):

// Test of APAC stuff, maybe.

Meteor.startup(function() {

opHelper = new OperationHelper({
awsId: "<key>",
awsSecret: "<key>",
assocId: "<id>"
});

var test = opHelper.executeSync('ItemLookup', {
SearchIndex: 'Books',
ResponseGroup: 'Small,Images',
IdType: 'ISBN',
ItemId: '9780078025600'
});

console.log(JSON.sringify(test));

});

我得到以下输出(我能做的最好的是从正在执行代码的 VM 截屏: error screenshot

我不知道发生了什么。我是 Meteor 的新手,之前只是通过 meteor-npm 使用这个 apac 的东西,但我被告知用异步编写一个智能包包装器会比我以前做的要好得多。

如有任何帮助,我们将不胜感激。

最佳答案

Meteor._wrapAsync 期望它包装的函数使用标准的 node.js function (err, result) 错误报告约定:

doSomethingAsync(arg1, arg2, function (err, result) {
if (err) {
// error occurred
} else {
// all is well
}
});

但是 apac 使用不同的错误报告约定:

opHelper.execute("...", {
//...
}, function (result) {
// all is well
}, function (err) {
// error occurred
});

(GitHub仓库中的apac版本使用标准约定,但由于是breaking change,所以没有推送到npm。)

我猜当 apac 将结果作为回调的第一个参数传递时,_wrapAsync 将其误认为是错误,并抛出异常。

在传递到 _wrapAsync 之前,您必须转换为 node.js 约定。试试这个:

OperationHelper.prototype.executeSync = Meteor._wrapAsync(function (name, args, callback) {
callback = _.once(callback); // work around apac bug
this.execute(name, args, function (result) {
callback(null, result);
}, function (err) {
callback(err);
});
});

关于javascript - 我的异步包装 Meteor 包有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com