【发布时间】:2014-09-01 17:53:08
【问题描述】:
我目前正在尝试编写我的第一个 Meteor 智能包,但遇到了问题。
我正在尝试编写一个包装以下 node.js 模块的包: https://github.com/dmcquay/node-apac
我被告知在这样做时,我应该使用 Meteor._wrapAsync 包装 OperationHelper.execute() 方法,以避免在以后的项目中使用它时出现回调地狱。
我的包中目前有以下代码:
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);
它似乎以应有的方式扩展原型(我认为),但是当我使用以下代码调用它时(我刚刚创建了一个准系统 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 截屏:
我不知道发生了什么。我是 Meteor 的新手,之前只是通过 meteor-npm 使用这个 apac 的东西,但有人告诉我用异步编写一个智能包包装器会比我以前做的要好得多。
任何帮助将不胜感激。
【问题讨论】:
标签: javascript node.js asynchronous meteor