【问题标题】:Isn't it better to be async with Node与Node异步不是更好吗
【发布时间】:2016-05-13 08:28:03
【问题描述】:

这是我的代码

var x = 0
data.results[0].taxonomies.some(function(e){
    if(taxo.indexOf(e.code)!=-1){ //if at least one code from the data base is in my list of codes
        callback(validLic(data.results[0].taxonomies)) //return true after some other validations
        return true
    }else{
        x++
        return false
    }
})
if(x==data.results[0].taxonomies.length){callback(false)}//if the entire array was processed, and I didn't find anything I was looking for, return false

我希望有人确认,由于节点的异步特性,最后一个 if 语句在某个时间点,在我处理完数组之前一定会触发。

如果没有一些同步或并行库的帮助,我如何才能更好地管理这种情况?

我这样问的原因是因为我的印象是,如果我不能写出完全异步的东西,那么我就没有效率地写它,对吧?

编辑:

根据 Luc Hendirks 的逻辑,我已将代码更改为:

var flag = data.results[0].taxonomies.some(function(e){
   if(taxo.indexOf(e.code)!=-1){ //if at least one code from the data base is in my list of codes
       return true
   }else{
       return false
   }
})
if(flag==true){
    callback(validLic(data.results[0].taxonomies))
}else{
    callback(false)
}

因为这遵循下面概述的同步特征,所以在现在调用回调之前我不应该遇到未定义标志的问题,对吧?

【问题讨论】:

  • 你的印象是从哪里来的?
  • 我把整个游戏写成异步的,太棒了。
  • 我已经看到了数百个 Hello World 的高效“同步”实现。这是一个:echo "Hello world"。这是一个“异步”版本:echo "Hello World" & 哪个更错误?
  • 为什么不想使用并行库? parallel 是一个很棒的并行库,async 非常适合异步代码(但不是真正的并行)。 async 为您的案例提供了许多非常有用的方法。
  • 回答你的问题,如果callback 有一些异步方法,那么是的,代码是错误的。如果只是同步方法(返回值),那就对了。

标签: javascript arrays node.js performance asynchronous


【解决方案1】:

Javascript(和 Node)是单线程的,这意味着它只有 1 个 CPU 可用。如果你调用的函数只需要 CPU 时间,那么让它异步是没有用的。如果你需要调用一个函数并且 CPU 必须等待(什么都不做),那么让它异步是非常有用的。因为当它等待函数完成时,它可以做其他事情。

使用正则表达式检查 url 是否有效的函数可以是同步的,因为 CPU 需要进行一些计算并得到结果。如果该函数确实执行 GET 请求并检查响应代码,则 CPU 必须等待,直到收到响应。同时它可以做其他事情,所以这个函数应该是异步的。

同步函数和异步函数的区别在于同步函数返回值:

function(a) { return a; }

并且异步函数使用回调函数返回结果(这是您作为函数参数放入的实际函数):

function(callback){
    // Do something that takes time but not CPU, like an API call...
    callback('Some result');
}

一个同步函数是这样调用的:

var a = something();

像这样异步:

something(function(result){
    console.log(result);
});

所以回答你的问题,如果some() 是一个异步函数,那么最后一个 if 语句可以在某个函数完成之前执行。因为:CPU不想等待。它可以在等待时做其他事情。这就是异步编程的力量。 t

同样重要的是要知道 Javascript/Node 中不存在“并行”。只有“做事而不是等待”,比如同时执行多个 API 调用。这不是使用多线程的并行计算。

这里有更多信息:What is the difference between synchronous and asynchronous programming (in node.js)

【讨论】:

  • 所以我需要找到一种同步方法来查看数组中的元素。感谢您的信息
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 2013-05-24
  • 1970-01-01
  • 2018-06-06
  • 2018-09-29
  • 2019-11-30
  • 2016-06-20
相关资源
最近更新 更多