DoSomething()が呼び出されるたびにnodeIDマッピングが完了することを期待できますか?
nodeIDs = $.map(nodeIDs, function(n){
return n.match(/\d+$/);
});
doSomething(nodeIDs);
Node.jsのすべてのコールバックは非同期だと思いましたか?コールバックは同期的である可能性があるという一般的なプログラミングに関する記事を読みましたが、node.jsについてはわかりませんか?
はい、 .map
は同期です。 「コールバック」は「非同期」を意味するものではありません。
async
モジュールをインポートして非同期の 'map
'メソッドを持つ
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);
}
forofを使用する(同期):
let arr = ['fizz', 'buzz']
//example
for (const item of arr) {
//this Examp_func returns array
console.log((await Examp_func(item )).length);
}
この関数は同期です-それ以外の場合、マップ操作の結果を返すことができませんでした。
より長い時間がかかる可能性のあるコールバック(主にIOが原因)は、nodejsでは非同期です-メソッドが明示的に同期であると明示的にマークされていない限り(fs.readFileSync
など-ただし、コールバックを使用しません)。どういうわけかそれを混乱させたでしょう。