web-dev-qa-db-ja.com

Node.js Array.map()は非同期ですか?

DoSomething()が呼び出されるたびにnodeIDマッピングが完了することを期待できますか?

nodeIDs = $.map(nodeIDs, function(n){
    return n.match(/\d+$/);
});
doSomething(nodeIDs);

Node.jsのすべてのコールバックは非同期だと思いましたか?コールバックは同期的である可能性があるという一般的なプログラミングに関する記事を読みましたが、node.jsについてはわかりませんか?

27
bonchef

はい、 .mapは同期です。 「コールバック」は「非同期」を意味するものではありません。

15
user1479055

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);
}
3
Damien Romito

forofを使用する(同期):

let arr = ['fizz', 'buzz']
//example
    for (const item of arr) {
   //this Examp_func returns array
     console.log((await Examp_func(item )).length);
    }
0

この関数は同期です-それ以外の場合、マップ操作の結果を返すことができませんでした。

より長い時間がかかる可能性のあるコールバック(主にIOが原因)は、nodejsでは非同期です-メソッドが明示的に同期であると明示的にマークされていない限り(fs.readFileSyncなど-ただし、コールバックを使用しません)。どういうわけかそれを混乱させたでしょう。

0
ThiefMaster