与Node异步是不是更好

时间:2016-02-03 22:25:09

标签: javascript arrays node.js performance asynchronous

这是我的代码

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)
}

因为这遵循下面列出的同步特征,所以在现在调用回调之前,我不应该有一个未定义标志的问题吗?

1 个答案:

答案 0 :(得分:4)

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不想等待。它可以在等待时做其他事情。这是异步编程的强大功能。吨

了解" parallel"同样重要。在Javascript / Node中不存在。只有&而不是等待,比如同时执行多个API调用。这不是使用多线程的并行计算。

以下是一些信息:What is the difference between synchronous and asynchronous programming (in node.js)