Asynchronous Meteor wrapAsync没有方法';应用';
我试图获取一个异步函数,将其包装并调用:Asynchronous Meteor wrapAsync没有方法';应用';,asynchronous,meteor,Asynchronous,Meteor,我试图获取一个异步函数,将其包装并调用: s3 = new AWS.S3(); Meteor.methods({ getbuckets: function( params, buckets ) { var buckets = Meteor.wrapAsync( s3.listBuckets( params, function( err, data ) { if ( err ) {
s3 = new AWS.S3();
Meteor.methods({
getbuckets: function( params, buckets ) {
var buckets = Meteor.wrapAsync(
s3.listBuckets( params, function( err, data ) {
if ( err ) {
console.log( err, err.stack ); // error
} else {
return buckets;
}
return {};
}) // End listBuckets
); // End wrapAsync
return buckets( params );
}
});
调用该方法时,出现以下错误:
TypeError:对象#没有“应用”方法
这是指向带有
bucket(params)
Meteor的行。wrapAsync
将函数作为参数。您所做的是执行函数s3.listbackes
,并将返回值作为参数传递给Meteor.wrapAsync
。它没有原型功能
。因此,您需要将其包装在一个匿名函数中,如下所示:
Meteor.methods({
getbuckets: function( params, buckets ) {
var buckets = Meteor.wrapAsync(
function bucketLister (params, resolveFuture) {
s3.listBuckets( params, function( err, data ) {
if ( err ) {
console.log( err, err.stack ); // error
resolveFuture(false)
} else {
resolveFuture(buckets);
}
return {};
}) // End listBuckets
} // End bucketLister
); // End wrapAsync
return buckets( params );
}
});
传递给Meteor.wrapAsync的函数将函数
resolveFuture
作为其参数。我们将实际返回值传递给它。要了解更多信息,请检查orMeteor.wrapAsync采用现有的异步方法,例如s3.listbugkets
。第二个参数包含该应绑定到的上下文。这应该起作用:
Meteor.methods({
getbuckets: function(params) {
var listBuckets = Meteor.wrapAsync(s3.listBuckets, s3)
return listBuckets(params);
}
});