繁体   English   中英

Meteor:来自观察回调的Meteor.call()不会执行

Meteor: Meteor.call() from within observe callback does not execute

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

是否有可能从Meteor的observe回调中调用服务器方法?

我把一个重现问题的例子放在一起,在Meteor.call()的回调中调用的myCursor.observe()不会执行。 当从observe回调中调用时, Meteor.method本身也不会回调错误,它只返回Undefined

停止忽略我, Meteor.call() :)非常感谢任何帮助!

observe.js

items=new Meteor.Collection("Items");

if (Meteor.isClient) {
    Meteor.subscribe("Items");
    Meteor.startup(function(){
        itemsCursor=items.find();
        itemsHandle=itemsCursor.observe({
            added : function(doc){
                console.log("added "+doc.text);
                Meteor.call('aMethod',doc.text,function(e,r){
                    if(e){
                        console.log("error from server: "+e);
                    }else{
                        console.log("response from server: "+r);
                    }
                });
            },
            removed : function(doc){
                console.log("removed "+doc.text);
                Meteor.call('aMethod',doc.text,function(e,r){
                    if(e){
                        console.log("error from server: "+e);
                    }else{
                        console.log("response from server: "+r);
                    }
                });
            }
        });
    });

    Template.test.items=function(){
        return items.find();
    }
    Template.test.events({
        'click #add':function(){
            items.insert({"text":"Timestamp: "+(new Date().getTime())});
        },
        'click #remove':function(){
            items.remove(items.findOne()._id);
        }
    });
}

if (Meteor.isServer) {
    Meteor.publish("Items",function(){
        return items.find();
    });
    items.allow({
        insert : function(userId,doc){
            return true;
        },
        update : function(userId,doc){
            return true;
        },
        remove : function(userId,doc){
            return true;
        }
    });
    Meteor.methods({
        aMethod:function(text){
            console.log("Got it! "+text);
            return "Got it! "+text;
        }
    });
}

observe.html

<head>
  <title>observe</title>
</head>

<body>
  {{> test}}
</body>

<template name="test">
  <button id="add">add item</button>
  <button id="remove">remove item</button>
    <ol>
        {{#each items}}
        <li>{{text}}</li>
        {{/each}}
    </ol>
</template>
2 个回复

这可能是一个已知的问题,我不确定,因为我自己没有尝试过,但看起来可能有一个解决方法(参见https://github.com/meteor/meteor/issues/907

Meteor.call添加到即时的setTimeout回调中:

added: function(doc) {
    console.log("added "+doc.text);
    setTimeout(function() {
        Meteor.call('aMethod',doc.text,function(e,r){
            if(e){
                console.log("error from server: "+e);
            }else{
                console.log("response from server: "+r);
            }
        });
    },0);
}

从客户端方法调用时,Btw Tarang的答案也适用。 基本上我在客户端范围内有一个文件。 这个文件是一个方法定义。 在我的方法定义中,我在服务器上调用一个方法。

我遇到了问题,因为只调用了服务器调用的客户端存根,并且没有调用服务器方法。 修复是这个:

Meteor.methods({  
    assignUserSession: function(options) {
        setTimeout(function() { // https://stackoverflow.com/questions/18645334/meteor-meteor-call-from-within-observe-callback-does-not-execute
            // Find all the base_accounts of this user and from there decide which view to prioritize.
            Meteor.call('user_base_accounts', {user_id: Meteor.userId()}, function(error,result){
                ....
                //server is then called due to logs shown in the command prompt
                ....
            });
        });
    }
});

感谢您指出了这一点!

1 Meteor.call回调未执行

我的问题是永远不会调用警报。 无论myFunction是什么,它返回什么以及何时返回,都应执行回调函数中的警报,但这永远不会发生。 对这里可能发生的事情有什么了解并对此进行修复吗? ...

2 meteor.call与未返回的回调

我很高兴对此有很多疑问,但是我似乎找不到相关的答案。 我正在使用Meteor调用,并带有对服务器上某个方法的回调,该方法通过bitly收缩bitly ,但是尽管此方法在服务器上运行,但在客户端上却得到未定义的响应。 代码有什么想法吗? 客户 Meteor.call('bitl ...

3 $ meteor.call未调用回调

我是Meteor的新手,有一个$ meteor.call,尽管我在Meteor.method的服务器节点检查器中看到了返回值,但从未调用过回调。 客户 服务器 ...

2015-12-20 20:39:09 1 68   meteor
4 避免回调地狱。 Meteor.call承诺

我一直试图避免在Meteor中回调地狱,但首先,我会解释我的问题: 我在服务器中声明了一些Meteor方法,并且我在客户端使用Meteor.call调用它们,但主要的问题是我有大量的回调使得调试成为一项非常困难的任务(以及manteinance也......)。 如果我使用“小”项目,这 ...

5 Meteor.call()回调不返回响应

当我们单击按钮时Meteor.call没有给出响应。如何获得响应和基于响应的结果。请帮助我。 当我们单击按钮saveprofile时,没有给出响应,但是数据库更新了记录。 这是客户端代码 这是我的服务器端代码 ...

6 Meteor.call回调内部的sys.exec的Meteor回调

我有一个事件触发Metor.call() : 但是我在服务器的Metheor.methods内的runCode函数中也有一个回调,而且我找不到在上面的代码中使它返回response的方法。 我想要一种方法,让exec回调以不带setInterval runCode返回某些值,而这 ...

8 Meteor.call回调函数返回未定义

我在客户端上有这个代码: 这在服务器上: 在创建核对表时,Meteor.call会将信息成功传递给服务器。 我可以在服务器控制台中看到新核对表的ID。 但是,客户端只会看到错误和结果的undefined 。 ...

10 Meteor.call不等待结果

Meteor.call中的Async回调不等待Meteor.method的结果。这是代码。 这是方法 触发Meteor.call时,我会在服务器上success的登录记录及其结果。 在客户身上,我获得了success undefined 。 客户端上的调用不会等待结果。我也在 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM