Javascript 从函数Is Node.js调用函数是否可以接受?

Javascript 从函数Is Node.js调用函数是否可以接受?,javascript,node.js,Javascript,Node.js,我正在通过转换现有的Rails项目来学习Node.js。我花了一些时间了解回调和节点的异步特性 第一次尝试看起来还可以,我的RoR功能得到了复制,使用Node的总体速度要快得多 我开始怀疑我的创建是否违背了所有节点主体 我有一些函数,根据结果调用其他函数。简单的if,else if,else逻辑 我想弄清楚的是,这样做是否可以,或者我是否应该使用类似的东西 一个特定函数如下所示: checkAuthorization: function(socket,callback) { clie

我正在通过转换现有的Rails项目来学习Node.js。我花了一些时间了解回调和节点的异步特性

第一次尝试看起来还可以,我的RoR功能得到了复制,使用Node的总体速度要快得多

我开始怀疑我的创建是否违背了所有节点主体

我有一些函数,根据结果调用其他函数。简单的if,else if,else逻辑

我想弄清楚的是,这样做是否可以,或者我是否应该使用类似的东西

一个特定函数如下所示:

  checkAuthorization: function(socket,callback) {
    client.hget(socket.mac, 'authorized', function(err, val) {
      callback(val);
      if (val == null) {
        checkExteralAuth(socket.mac, socket.serial, function(val) {
          data = JSON.parse(val)
          authorized = (data["live"] == 'yep') ? true : false
          setRedisHash(socket.mac, 'authorized', authorized);
        });
      };
    });
  }

有没有一种模式“节点”方式可以做到这一点?

为什么没有?js是一个JavaScript平台。在函数编程语言中调用函数内部的函数是完全可以接受的。你总是这么做

也就是说,有时您可能希望避免简单地调用函数,尤其是使用回调。调用函数的方式(由
callback
引用)意味着,除非该函数显式绑定到某个上下文(使用
bind
),否则将丢失上下文

相反,
callback.apply(这个[val])可能是处理业务的首选方式

另一件事是,由于您要传递一个回调函数,以便稍后调用,所以您可能需要认真考虑尽可能多地使用异步。我对node.js没有太多的经验,但就其本质而言,您会发现自己编写回调、处理程序,并且到处使用一般的异步技巧


拥有一个能让工作更轻松的软件包总是很方便的…

为什么不呢?js是一个JavaScript平台。在函数编程语言中调用函数内部的函数是完全可以接受的。你总是这么做

也就是说,有时您可能希望避免简单地调用函数,尤其是使用回调。调用函数的方式(由
callback
引用)意味着,除非该函数显式绑定到某个上下文(使用
bind
),否则将丢失上下文

相反,
callback.apply(这个[val])可能是处理业务的首选方式

另一件事是,由于您要传递一个回调函数,以便稍后调用,所以您可能需要认真考虑尽可能多地使用异步。我对node.js没有太多的经验,但就其本质而言,您会发现自己编写回调、处理程序,并且到处使用一般的异步技巧


拥有一个使这项工作更容易的包总是很方便的…

在这段代码中没有任何本质上不符合节点要求的东西,您将看到的大多数库都是这样编写的

然而,当您在处理一个增长较快的应用程序时,您最终会遇到所谓的“回调地狱”,在这个地狱中,嵌套的级别达到了可以有几十个嵌套匿名函数调用的级别

这很快变得不可维护,这就是控制流库的用武之地。有几种,最流行的是
async
q


async
可以很容易地放入任何代码库中来管理回调地狱,
q
需要将代码架构成承诺的样子,但通常会产生更好的API。

这段代码中没有任何根本不符合节点要求的内容,您将看到的大多数库都是这样编写的

然而,当您在处理一个增长较快的应用程序时,您最终会遇到所谓的“回调地狱”,在这个地狱中,嵌套的级别达到了可以有几十个嵌套匿名函数调用的级别

这很快变得不可维护,这就是控制流库的用武之地。有几种,最流行的是
async
q


async
可以很容易地放到任何代码库中来管理回调地狱,
q
需要将代码架构成承诺的工作方式,但通常会产生更好的API。

这绝对没问题。但是,使用异步非常好(从可读性/可维护性的角度来看)。最后,您是否应该使用async或其他类似的库只是个人偏好的问题。这也意味着这个问题不适合SO,因为任何答案都将基于意见(编辑:或答案为“是”)。感谢,感谢,我们将激发意见,但需要一些一般指导。我想我会抓住机会学点新东西。这绝对没关系。但是,使用异步非常好(从可读性/可维护性的角度来看)。最后,您是否应该使用async或其他类似的库只是个人偏好的问题。这也意味着这个问题不适合SO,因为任何答案都将基于意见(编辑:或答案为“是”)。感谢,感谢,我们将激发意见,但需要一些一般指导。我想我会抓住机会学习一些新东西。申请和致电是slowwww@GabrielLlamas:是的,它们的速度要慢两到四倍,但直接调用该函数确实意味着您失去了调用上下文,您可能需要=>如果速度很重要,且上下文不变,请使用
bind
…调用速度大约要慢40%,在最新版本的chrome中应用80%左右,bind的速度要慢近100%。。。因此,至少就目前而言,当速度是一个问题时,使用
bind
并不是最明智的选择:@DavidMulder:JS几乎无法进行基准测试,而且各种引擎之间的速度差异很大。此外,FF和Chrome之间无情的速度之争意味着我们今天看到的速度差异是m