2014-07-24 7 views
17

से वापसी मूल्य प्राप्त करें मैं बस सेटटाइमआउट से वापसी मूल्य प्राप्त करना चाहता हूं लेकिन मुझे जो मिलता है वह फ़ंक्शन का एक संपूर्ण टेक्स्ट प्रारूप है?सेटटाइमआउट

function x() { 
    setTimeout(y = function() { 
     return 'done'; 
    }, 1000); 
    return y; 
} 

console.log(x()); 
+0

अपने वाक्य रचना की तरह है, यह केवल समारोह वापस आ जाएगी हुई। – Mritunjay

+0

क्या आप लौटाए जाने के लिए "किया" चाहते हैं? आप फ़ंक्शन का परिणाम कैसे वापस कर सकते हैं, जिसे बाद में 1000 एमएस कहा जाएगा? –

+0

टाइमआउट असीमित हैं, इसलिए आप उनसे वापस नहीं आ सकते हैं। (ठीक है, आप कर सकते हैं, लेकिन वापसी मूल्य कहीं भी नहीं जा रहा है) – Ferdi265

उत्तर

29

आपको इसके लिए वादे का उपयोग करने की आवश्यकता है। वे available in ES6 हैं, लेकिन quite easily polyfilled जा सकता है:

function x() { 
    var promise = new Promise(function(resolve, reject) { 
    window.setTimeout(function() { 
     resolve('done!'); 
    }); 
    }); 
    return promise; 
} 

x().then(function(done) { 
    console.log(done); // --> 'done!' 
}); 
+0

वास्तव में मेरे उदाहरण में 'किया गया' एक वादा था जिसे सेटटाइमआउट के अंदर वापस करने की आवश्यकता है .. क्योंकि मैं setTimeout के अंदर वापस deferred.resolve() प्राप्त नहीं कर सकता। यह कैसे हो सकता है? धन्यवाद – Vainglory07

+1

क्या आप प्रश्न में अपने कोड का एक स्पष्ट उदाहरण पोस्ट कर सकते हैं? –

4

आप समारोह आप setTimeout के पास से एक वापसी मान नहीं मिल सकता है।

आपके उदाहरण में setTimeout (x) नामक फ़ंक्शन निष्पादित हो जाएगा और आपके द्वारा setTimeout पर जाने वाले फ़ंक्शन से पहले वापस लौटाया जाएगा।

जो भी आप प्राप्त मूल्य के साथ करना चाहते हैं, आपको इसे setTimeout पर दिए गए फ़ंक्शन से करना होगा।

function x() { 
    setTimeout(function() { 
     console.log("done"); 
    }, 1000); 
} 

x(); 
+0

स्वीकार करता हूं लवली और सटीक स्पष्टीकरण! –

1

बेहतर समारोह x और जो कुछ भी काम आपको लगता है कि समय समाप्ति के बाद प्रदर्शन करने के लिए है कि कॉलबैक में भेज चाहते हैं के लिए एक कॉलबैक लेने के लिए:

अपने उदाहरण में, कि रूप में लिखा जाएगा।

function x (callback) { 
    setTimeout(function() { 
     callback("done"); 
    }, 1000); 
} 

x(console.log.bind(console)); //this is special case of console.log 
x(alert) 
0

मुझे लगता है कि आप झंडा घटना पता करने के लिए करना चाहते हैं हुई है या नहीं। setTimeout एक मूल्य वापस नहीं। आप घटना हुई पता लगाने के लिए एक चर का उपयोग कर सकते है या नहीं

var y="notdone"; 
    setTimeout(function() { 
     y="done"; 
    }, 1000); 

आप चर y का उपयोग कर सकते टाइमआउट के बाद पता करने के लिए किया गया है या नहीं

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