这是我的代码
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
我希望有人确认,由于 Node 的异步性质,最后一个 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)
}
因为这遵循下面概述的同步特征,所以在现在调用回调之前我不应该遇到未定义标志的问题,对吗?
最佳答案
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语句可以在some函数完成之前执行。因为:CPU不想等待。等待时它可以做其他事情。这就是异步编程的力量。 t
了解 Javascript/Node 中不存在“并行”也很重要。只有“做事而不是等待”,比如同时执行多个 API 调用。这不是使用多线程的并行计算。
这里有更多信息:What is the difference between synchronous and asynchronous programming (in node.js)
关于javascript - 与 Node 异步不是更好吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188956/