首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor wrapAsync

Meteor wrapAsync
EN

Stack Overflow用户
提问于 2016-02-01 21:45:07
回答 2查看 516关注 0票数 2

我正在尝试实现以下场景: 1.客户端调用meteor-method。2.在meteor-method中,我向不同的服务器发送HTTP-Post。3.响应HTTP调用时,meteor方法应返回true,如果出现错误,则应返回false。

下面是我的meteor方法:

代码语言:javascript
复制
uploadUserImage: function(data_url,userid) {
    asyncfnc =function(data,uid){
        HTTP.post("http://localhost:2000/upload", {
            data: {
                "data_url": data,
                "user_id": uid
            }
        },function(err,res){
            console.log(res);
            if (err){
                console.log("error");
                throw new Error(err.message);
            }
            else{
                console.log("return true");
                return true;
            }
        });
    };
    var waitForResult = Meteor.wrapAsync(asyncfnc);
    var result = waitForResult(data_url,userid);
    return result;
}

HTTP调用起作用了,我也进入了HTTP.post函数的回调。但是在客户端,当我调用meteor方法时,我没有进入我的回调函数。它看起来是这样的:

代码语言:javascript
复制
Meteor.call("uploadUserImage",data_url,Session.get("newUserID"),function (err, res) {
       if(err){
           console.log(err);
       } else {
           console.log('response: ', res);
       }
 });

我做错了什么?为什么我的meteor-method没有返回任何东西?我的Meteor.wrapAsync()是否一切正常?

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

发布于 2016-02-01 22:25:32

我找到了一个不需要Meteor.wrapAsync()的解决方案。

代码语言:javascript
复制
 var url = "http://localhost:2000/upload";
    //synchronous GET
    var result = Meteor.http.post(url,{
                data: {
                    "title": "i want to upload a picture",
                    "data_url": data_url,
                    "user_id": userid
                },timeout:30000});
    if(result.statusCode==200) {
        console.log(result);
        console.log("response received.");
        return result;
    } else {
        console.log("Response issue: ", result.statusCode);
        var errorJson = JSON.parse(result.content);
        throw new Meteor.Error(result.statusCode, errorJson.error);
    }

这使得HTTP-Post-Call同步,因此不需要包装异步。

票数 2
EN

Stack Overflow用户

发布于 2016-09-25 06:03:54

在这种情况下,你的要求太高了。Meteor方法可以同步调用,但如果该方法像这样进行远程调用,则不可取。

我的感觉是,您使用的是过程化编程模型,您希望1)对服务器的调用和2)向另一个远程服务器发送请求的同步结果。并且您希望从调用中获得返回值。它不是那样工作的。

Meteor在很大程度上避免了处理异步,但有时您必须接受需要更多的工作才能正确地处理它。

所以我的建议是使用回调来通知。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35132093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档