Q.js – 使用延迟

我如何从下面的例子中获得文本的价值?

Q.js有一个使用Deferred的例子:

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; 

在这种情况下,使用节点asynchronousfunction。 我想要做的是从返回的deferred.promise中获取文本的值。 当我console.log(deferred.promise)我得到这个:

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

我做错了什么(因为我只是从这里复制/粘贴的例子: https : //github.com/kriskowal/q#using-deferreds )或者我还需要做什么才能真正从文件中获取文本?

我知道node.js上面有一个同步版本的调用 – 我的目标是了解延迟如何处理这个库。

您可以通过Promise的.then()方法获取值:

 function read() { // your snippet here... } read().then(function (text) { console.log(text); }); 

此外,error handling程序可以作为第二个parameter passing给.fail().fail()方法:

 read().fail(function (err) { console.log(err); }); 

请参阅https://github.com/kriskowal/q#adapting-node

可以用类似nodejs的方式重写:

 var read = Q.nfcall(FS.readFile, FS, "foo.txt", "utf-8"); read().then( function (text) { console.log(text) } ); 
 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

 deferred.promise.then(function (text) { console.log(text); // Bingo! }); 
 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 )); }); 
Interesting Posts