Can I count on nodeIDs mapping is completed every time doSomething() is called?
nodeIDs = $.map(nodeIDs, function(n){
return n.match(/\d+$/);
});
doSomething(nodeIDs);
I thought all callbacks in node.js are asynchronous? I did read an article on general programming that callback could be synchronous but I am not sure about node.js?
JavaScript is also a functional programming language. What you have here is a «higher order function», a function which takes a function as a parameter. Higher order functions are synchronous (but see note below).
Sources:
map()
is a typical example of a higher order function. It takes a function and applies it to all elements of an array. The definition sounds very «functional». This function is also not provided by Node. It is documented by MDN Array.prototype.map() and specified by ECMAScript 5.1 .
To answer your question: Yes, doSomething(nodeIDs)
is called after all elements have been applied.
setTimeout()
is not a higher order function even if it takes a function as a parameter because setTimeout()
is not really purely functional because it uses time.
Pure functionality is timeless.
For example the result of map()
doesn't depend on time.
And that's what this question is really about.
If something doesn't depend on time you execute it synchronously.
Problem solved.
Thanks to Simon for challenging the definition of the higher order function in JavaScript.
Yes, .map
is synchronous. "Callback" does not imply "asynchronous".
import the async
module to have an asynchronous ' map
' method
var async = require('async');
var arr = ['1','2'];
async.map(arr, getInfo, function (e, r) {
console.log(r);
});
function getInfo(name, callback) {
setTimeout(function() {
callback(null, name + 'new');
}, 1000);
}
This function is synchronous - otherwise it couldn't return the result of the map operation.
Any callbacks that might take longer time (mainly due to IO) are asynchronous in nodejs - unless the method is explicitely marked as being synchronous (such as fs.readFileSync
- but that doesn't use a callback). You probably confused that somehow.
use a forof (is synchronous):
let arr = ['fizz', 'buzz']
//example
for (const item of arr) {
//this Examp_func returns array
console.log((await Examp_func(item )).length);
}
YES, map function is asynchronous and is part of ECMAScript . NodeJS uses map from that definition. Try running this code to see it in action.
const array = ['first','second'] function name(params) { setTimeout( () => console.log('name: ' + params), 5000 ); } console.log('wait for 5 seconds') array.map(v => { name(v) })
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.