काम नहीं कर रहा, कुछ इस तरह लेखन:Node.js: जबकि पाश कॉलबैक यह जानते हुए कि जबकि Node.js एसिंक्रोनस रूप से काम कर रहा है के रूप में की उम्मीद
function sleep() {
var stop = new Date().getTime();
while(new Date().getTime < stop + 15000) {
;
}
}
sleep();
console.log("done");
... नींद() कहेंगे, के लिए सर्वर को ब्लॉक जबकि लूप (15secs) की अवधि और फिर कंसोल पर "किया" प्रिंट करें। जहां तक मैं समझता हूं, ऐसा इसलिए है क्योंकि Node.js जावास्क्रिप्ट को केवल मुख्य धागे तक पहुंच प्रदान कर रहा है, और इसलिए इस चीज का बच्चा आगे निष्पादन को रोक देगा।
तो मैं समझता हूँ कि इस का हल कॉलबैक उपयोग करने के लिए है:
function sleep(callback) {
var stop = new Date().getTime();
while(new Date().getTime() < stop + 15000) {
;
}
callback();
}
sleep(function() {
console.log("done sleeping");
});
console.log("DONE");
तो मैंने सोचा कि यह 'पूर्ण' मुद्रित होता है और 15 सेकेंड के बाद। 'नींद आ रही है', क्योंकि नींद() फ़ंक्शन को कॉल किया जाता है और कॉलबैक फ़ंक्शन में पॉइंटर दिया जाता है। हालांकि यह फ़ंक्शन काम कर रहा है (जबकि लूप), अंतिम पंक्ति निष्पादित की जाएगी (मुद्रित 'किया गया')। 15 सेकंड के बाद, जब नींद() फ़ंक्शन समाप्त हो जाती है, तो वह दिए गए कॉलबैक फ़ंक्शन को कॉल करती है, जो तब 'नींद की नींद' प्रिंट करती है।
स्पष्ट रूप से मैं यहां कुछ गलत समझ गया, क्योंकि उपरोक्त दोनों तरीकों से अवरुद्ध है। क्या कोई कृपया स्पष्टीकरण दे सकता है?
अग्रिम धन्यवाद, Slagjoeyoco
आप अपने आप को उलझी रहे हैं। एक सरल सेटटाइमआउट (कॉलबैक, देरी) को अतुल्यकालिक रूप से निर्देशित करने के लिए पर्याप्त होना चाहिए। –
@ FabiánH.jr। मुद्दा यह है कि ओपी को यह समझने में दिलचस्पी हो सकती है कि उसका 'समय' क्यों काम नहीं कर रहा है और एक गैर-अवरुद्ध तरीके से 'जबकि' लिखा जा सकता है, जो कि इम्हो थोडा बेहतर है "इससे आपकी कोई फर्क नहीं पड़ता काम नहीं करता है, इसे इसके बजाय अन्य तरीके से करें "। – Mahn
अच्छी तरह से सच, महान उत्तर समग्र और अब जब आप इसका उल्लेख करते हैं तो यह node.js की आंतरिक प्रक्रिया में काफी अंतर्दृष्टिपूर्ण था –