2014-07-08 9 views
9

समारोह है:नक्शा() जावास्क्रिप्ट सिंक्रोनस में है?

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

मेरे अपेक्षित व्यवहार केवल 1 आउटपुट के रूप में हो रही है, जब तक कि मैं

//return 'something' 

uncomment लेकिन मैं वास्तव में

1 
2 
3 

मैं गलत क्या कर रहा हूँ मिल सकता है?

अद्यतन:

मैं NodeJS साथ कि परीक्षण कर रहा हूँ।

मैं वास्तव में समझ में नहीं आता।

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); 
     } 
); 

दोनों एक ही

1 
2 
3 

लौटने और मैं सच में मैं जब तक एक वापसी या कॉलबैक तक अगले आइटम निष्पादित किया जाता है पाने के इंतजार करना चाहते हैं।

हल

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

तरह से यह करने के लिए है।

+2

आपका "अपेक्षित व्यवहार" क्यों है? – Alnitak

+0

आप कौन सा ब्राउज़र इस कोशिश कर रहे हैं?Google क्रोम के लिए मुझे दोनों मामलों में अपेक्षित परिणाम मिल रहा है। – robieee

+0

नोट: नक्शा एक सरणी में प्रत्येक तत्व के लिए एक बार प्रदान किए गए कॉलबैक फ़ंक्शन को कॉल करता है। यह क्या मैं गूगल क्रोम डिबगर में मिल गया है: [1,2,3] .map (समारोह (आइटम) { console.log (आइटम); // वापसी 'कुछ'; }) 1 VM63: 4 2 VM63: 4 3 VM63: 4 [अपरिभाषित, अपरिभाषित, अपरिभाषित] [1,2,3] .map (समारोह (आइटम) { console.log (आइटम); वापसी ' कुछ '; }) 1 वीएम 66: 4 2 वीएम 66: 4 3 वीएम 66: 4 ["कुछ", "कुछ", "कुछ"] – robieee

उत्तर

21

हां, नक्शा तुल्यकालिक है।
यह एक उच्च ऑर्डर फ़ंक्शन है, जो एक नया फ़ंक्शन लेता है और इसे दिए गए सरणी पर लागू करता है।

कुछ लोग सोचते हैं कि क्योंकि वे map पर पैरामीटर के रूप में कार्य करते हैं तो यह 'ईवेंट' कॉलबैक फ़ंक्शन की तरह कार्य करना चाहिए, लेकिन यह वास्तव में नहीं है। map फ़ंक्शन केवल सरणी में फ़ंक्शन पैरामीटर लागू करता है और केवल समाप्त होने के बाद, यह मानचित्र ब्लॉक के बाद परिणामी कोड के निष्पादन को जारी रखता है।

आपके 'अपेक्षित व्यवहार' के रूप में - यह आपके जैसा काम नहीं करता है;)

1

"मानचित्र() विधि इस सरणी में प्रत्येक तत्व पर एक प्रदत्त फ़ंक्शन को कॉल करने के परिणामों के साथ एक नई सरणी बनाता है।"

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

कॉलबैक प्रत्येक आइटम के लिए कहा जाता है, अपने तर्क निष्पादित किया जाता है और वापसी मान नई सरणी में एक आइटम के रूप में स्थापित किया जाएगा।

+0

दूसरे शब्दों में 'फ़ंक्शन मैप (एफ, एक्सएस) {var out = []; के लिए (var i = 0; i [2,3,4] ' – elclanrs

+0

क्या इसका मतलब है नक्शा() उन कार्यों को समानांतर में निष्पादित करता है? – user3815910

+0

Array.map कॉलबैक को समकालिक रूप से निष्पादित करता है। –

0

आपके अपेक्षित व्यवहार से स्पष्ट नहीं है, आपकी पिछली हटाई गई पोस्ट में से किसी एक में कहीं भी पाया गया है कि आप async मानचित्र का उपयोग कर रहे हैं।

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

आशा है कि यह तुम्हारी मदद करेगा:

इस लिंक का प्रयास करें।

+0

अपेक्षित व्यवहार यह है कि नक्शा इस समारोह को तब तक निष्पादित नहीं कर रहा है जब तक कि पिछला कोई कुछ वापस नहीं कर रहा था। – user3815910

+0

मैं कुछ ऐसा करना चाहता हूं जो किसी और कोड निष्पादन को अवरुद्ध कर रहा है जब तक कि मैं xyz वापस नहीं करता; या कॉलबैक (शून्य, xyz); – user3815910

+0

कृपया इसे देखें: https://github.com/caolan/async#map – robieee

संबंधित मुद्दे