Meteor同步调用函数
Meteor synchronous call to function
祝您愉快。一直在绞尽脑汁想办法解决这个问题。
简而言之,我有一个表单,它有许多文本输入以及一个输入文件元素,用于将所述文件上传到AWS S3(通过lepozepo:s3ver5.1.4包)。这个包的好处是它不需要服务器,因此可以控制资源。
这个S3包将文件上传到我配置的bucket中,并返回访问其他几个数据点中的图像的URL。
所以,回到表单。我需要将返回的AWS URL与其他表单数据一起放入数据库。然而,S3调用所花费的时间比应用程序等待的时间要长,因为它是异步的,因此我在Meteor.call()的帖子中的字段是未定义的,只是因为它没有等待足够长的时间来获取AWS URL。
我可以通过将Meteor.call()直接放入S3调用的回调中来解决这个问题。然而,我希望避免这种情况,因为我更希望S3上传是它自己的模块或助手功能,甚至是任何助手之外的功能,因为它可以在应用程序的其他区域重复用于文件上传。
Psudo代码:
Template.contacts.events({
'submit #updateContact': function(e,template){
s3.upload({file:inputFile, path:client},function(error,result){
if(error){
// throw error
}else{
var uploadInfo = result;
}
});
formInfo = {name:$('[name=name]').val(),file:uploadInfo}; // <= file is undefined because S3 hasn't finished yet
Meteor.call('serverMethod',formInfo, function(e,r){
if(e){
// throw error message
}else{
// show success message
}
});
});
我可以将formInfo
和Meteor.call()
放在s3回调中,但这将导致更复杂的代码和更少的代码重用,而IMO是代码重用的理想场所。
我尝试过将s3封装在它自己的函数中,无论是否使用回调。我试过使用reactiveVars。我认为下次只使用s3文件信息更新数据库会使s3抽象更加复杂,因为它需要知道_id等等。。。
有什么想法吗?谢谢
如果您正在使用javascript,最好使用回调!使用这样的回调是什么,你不喜欢,或者认为它是模块化的或可重用的?
如下所示,uploader
函数除了包装s3.upload之外什么都不做。但您提到这是psudeocode,所以我认为您遗漏了希望包含在对s3.uploard的模块化调用中的逻辑(在此处包含它),但围绕处理响应解耦了逻辑(传入回调)。
uploader = function(s3_options, cb) {
s3.upload(s3_options, function(error,result){
if(error){
cb(error);
}else{
cb(null, result);
}
});
};
Template.contacts.events({
'submit #updateContact': function(e,template){
cb = function(error, uploadInfo) {
formInfo = {name:$('[name=name]').val(),file:uploadInfo};
Meteor.call('serverMethod',formInfo, function(e,r){
if(e){
// throw error message
}else{
// show success message
}
});
uploader({file:inputFile, path:client}, cb); // you don't show where `inputFile` or `client` come from
}
});
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 函数调用不起作用
- 函数中的Javascript函数调用