2014-07-08 26 views
9

Fonksiyon aşağıdaki gibidir: iHarita() javascript ile eşzamanlı mı?

//return 'something' 

yorumsuz Ama gerçekten ben yanlış yapıyorum

1 
2 
3 

olsun sürece

[1,2,3].map(function (item) 
{ 
    console.log(item); 
    //return 'something'; 
}); 

My beklenen davranış, çıktı olarak sadece 1 oluyor?

GÜNCELLEME:

i nodejs o test ediyorum.

Gerçekten anlamıyorum.

var async = require("async"); 

[1,2,3].map(function (item) 
{ 
     console.log(item); 
     //return 'something'; 
}); 
async.map([1,2,3], function (item,callback) 
    { 
     console.log(item); 
     //callback(null,true) 
    }, function (err,result) 
     { 
      console.log(result); 
     } 
); 

İkisi

aynı

1 
2 
3 

dönmek Ve gerçekten ben bir iade veya sonraki madde yürütüldüğünde kadar bir geri arama almak kadar beklemek istiyorum.

async.mapSeries([1,2,3], function (item,callback) 
    { 
     console.log(item); 
     //callback(null,true) 
    }, function (err,result) 
     { 
      console.log(result); 
     } 
); 

bunu yapmak için bir yoldur ÇÖZÜLDÜ.

+2

Neden "beklenen davranış" olduğunu? – Alnitak

+0

Bunu denediğiniz tarayıcı hangisi?google chrome için her iki durumda da beklenen sonucu aldım. – robieee

+0

Not: harita, bir dizideki her öğe için bir kez sağlanan geri arama işlevini çağırır. [1,2,3] .map ({;; // dönüş 'bir şey' console.log (item)} function (item) ): Bu i, Google krom ayıklayıcısında var nedir 1 VM63: 4 2 VM63: 4 3 VM63: 4 [tanımlanmamış, tanımlanmamış, tanımlanmamış] [1,2,3] .map (fonksiyon (eleman) { console.log (madde); dönüş ' bir şey '; }) 1 VM66: 4 2 VM66: 4 3 VM66: 4 ["bir şey", "bir şey", "bir şey"] – robieee

cevap

21

Evet, harita senkron olduğunu.
Yeni bir işlev alan ve verilen diziye uygulayan daha yüksek bir sipariş işlevi.

Bazı insanlar, map parametresine bir işlev verdikleri için bir olay geri çağırma işlevi gibi davranması gerektiğini düşünürler, ancak gerçekten yapmazlar. map işlevi sadece fonksiyon parametresini diziye uygular ve sadece bittikten sonra, harita bloğundan sonra ortaya çıkan kod için yürütmeyi sürdürür.

için 'beklenen davranış' gelince

- bu sadece düşünmek gibi çalışmaz;)

1

"Harita() yöntemi bu dizideki her eleman üzerinde sağlanan işlev çağrısının sonuçlarına içeren yeni bir dizi oluşturur."

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

geri arama, her öğe için çağrılır senin mantık yürütülür ve dönüş değeri yeni dizide bir öğe olarak ayarlanır. yayın sildi yere geçmişinin birinde beklenen davranış net

+0

Diğer bir deyişle, fonksiyon haritası (f, xs) {var out = []; for (var i = 0; i [2,3,4] ' – elclanrs

+0

map() bu fonksiyonları paralel olarak yürütmek anlamına mı geliyor? – user3815910

+0

Array.map, geri çağrıları eşzamanlı olarak yürütür. –

0

değil, senin zaman uyumsuz haritayı kullanarak bulundu.

http://runnable.com/UyR-6c2DZZ4SmfSh/async-map-example-for-node-js

size yardımcı olacağını umuyoruz:

şu bağlantıyı deneyin.

+0

beklenen davranış, bu haritanın bir öncekine bir şey dönene kadar başka bir zaman bu işlevi yürütmüyor. – user3815910

+0

xyz döndürene kadar herhangi bir kod yürütmeyi engelleyen bir şey olmasını isterim; veya geri arama (boş, xyz); – user3815910

+0

Lütfen bu konuya bakın: https://github.com/caolan/async#map – robieee

İlgili konular