gpt4 book ai didi

javascript - 调试器在 Meteor.call 之后停止,也许是客户端/服务器调试

转载 作者:行者123 更新时间:2023-11-27 23:06:28 24 4
gpt4 key购买 nike

我一直在尝试在服务器端调试 Meteor 方法。在客户端(Chrome 中)进行调试时,调试器会执行到下面代码的第 4 行(“Meteor.call”),然后立即返回到第 2 行(“convlist:function()”),从而避免执行第二条调试器指令。客户端/服务器控制台中没有错误。我也有服务器端调试器,但运行的进程永远不会跳转到它(服务器调试在 http://localhost:8080/debug?port=5858 )。任何建议将不胜感激。

客户端:

Template.conversationList.helpers({
convlist: function(){
debugger;
Meteor.call('getConvList', function(error, result){
if(error){
alert('Error');
} else {
debugger; // just to evaluate the result var
return result;
}
});
//edited 3rd debugger;
debugger;
}});

服务器端:

if (Meteor.isServer) {
Meteor.methods({
getConvList: function(){
debugger;
let myUser = new Array();
myUser.push(Meteor.user()._id);
var newConv = Conversations.aggregate([{ "$match" : { "users": {"$in": [Meteor.user()._id]}}}, { "$project": { lstmsg:1, "conversator": {"$setDifference": ["$users", myUser] }}}]);
return newConv;
}
});
}

最佳答案

  • 为什么服务器端的方法返回一个值,但在客户端却显示为未定义?原因:在客户端 Debug模式下,返回值似乎未定义,但稍后从服务器得到答案。尝试使用 Session.set 变量来捕获返回值并在服务器响应到来时获取动态更新。
  • <小时/>
    1. 为什么客户端调试器在第 4 行停止?

    在客户端,执行方法调用,并且仅传递稍后执行的回调 - 它不会在调用方法的同时运行。并且因为命令调试器只是断点的快捷方式,所以并没有真正执行。所以客户端只运行第 4 行,然后完成 convlist 函数是正确的。

  • 代码永远不会跳转到服务器端调试器:
  • 启动“meteor debug”后,服务器默认暂停。您必须打开节点检查器 ( http://localhost:8080/debug?port=5858 ) 才能取消暂停并启动您的应用程序。请注意,Firefox 无法很好地加载节点检查器,并且可能不会取消暂停服务器,在这种情况下,您将永远不会在服务器端看到换行符。

  • 为什么服务器端的方法返回一个值,但在客户端却显示为未定义?
  • 该方法调用是异步的。因此,当您在客户端调用它时,它立即返回 undefined,然后开始在服务器上执行。完成后,将调用回调函数,并且您可以访问结果值。您可以将回调中的结果存储在 session 变量中,并在从服务器方法调用返回后使用它在模板中显示。

    此外,请确保调试器指令位于您传递给方法调用的回调函数内。请记住,正确的方法调用是Method.call('方法名', 输入参数, 回调函数);尝试传递一个 null inputParameter,并检查回调执行的结果 - 这对我来说是不同的。如果我不传递任何 inputParameter,则当回调运行时,错误和结果都是未定义的,但如果我传递任何 inputParam,则该函数具有正确的参数。例如在客户端:

    Template.conversationList.helpers({
    convlist: function(){
    debugger;
    Meteor.call('getConvList', null, function(error, result){
    if(error){
    alert('Error');
    } else {
    debugger; // just to evaluate the result var
    return result;
    }
    });
    //edited 3rd debugger;
    debugger;
    }});

    关于javascript - 调试器在 Meteor.call 之后停止,也许是客户端/服务器调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36540111/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com