2012-09-20 14 views
14

का उपयोग करके मैं नीचे दिए गए उदाहरण से टेक्स्ट का मूल्य कैसे प्राप्त करूं?Q.js - स्थगित

Q.js स्थगित प्रयोग पर एक उदाहरण है:

var deferred = Q.defer(); 
FS.readFile("foo.txt", "utf-8", function (error, text) { 
    if (error) { 
     deferred.reject(new Error(error)); 
    } else { 
     deferred.resolve(text); 
    } 
}); 
return deferred.promise; 

इस मामले में, वहाँ एक नोड async समारोह इस्तेमाल किया जा रहा है। मैं जो करना चाहता हूं उसे वापस लौटाए जाने वाले deferred.promise से पाठ का मूल्य प्राप्त होता है। जब मैं (deferred.promise) console.log मैं इस मिल:

{ promiseSend: [Function], valueOf: [Function] } 

क्या कर रहा हूँ मैं गलत कर (के रूप में मैं सिर्फ नकल/यहाँ से उदाहरण चिपकाया: https://github.com/kriskowal/q#using-deferreds) या फिर क्या करना है मैं वास्तव में करने के लिए क्या करने की जरूरत फ़ाइल से उस पाठ को प्राप्त करें?

मुझे पता है कि node.js के ऊपर कॉल का एक सिंक्रोनस संस्करण है - मेरा लक्ष्य यह समझना है कि इस लाइब्रेरी के साथ कितना स्थगित काम करता है।

उत्तर

10

उदाहरण आप एक वादा के के माध्यम से मूल्य प्राप्त कर सकते हैं:

function read() { 
    // your snippet here... 
} 

read().then(function (text) { 
    console.log(text); 
}); 

इसके अलावा, त्रुटि संचालकों या तो .then() करने के लिए या .fail() के साथ एक 2 तर्क के रूप में पारित किया जा सकता विधि:

read().fail(function (err) { 
    console.log(err); 
}); 
2
Q = require('q'); 
FS = require('fs'); 

function qread() { 
    var deferred = Q.defer(); 
    FS.readFile("foo.txt", "utf-8", function (error, text) { 
    if (error) { 
    deferred.reject(new Error(error)); 
    } else { 
    deferred.resolve(text); 
    } 
    }); 
    return deferred.promise; 
}; 

var foo = qread(); 

setTimeout(function() { 
    console.log(""+foo); 
},1000); 

यह अजीब है आप console.log(foo) के लिए उत्पादन नहीं देख सकता। पता नहीं क्यों।

चेक अधिक यहाँ https://github.com/kriskowal/q/wiki/Examples-Gallery

2
deferred.promise.then(function (text) { 
    console.log(text); // Bingo! 
}); 
1
Q = require('q'); 
FS = require('fs'); 

var deferred = Q.defer(); 
FS.readFile("client-02.html", "utf-8", function (error, text) { 
    if (error) { 
    deferred.reject(new Error(error)); 
    } else { 
    deferred.resolve(text); 
    } 
return deferred.promise.done(setTimeout(console.log(text),1000)); 
});