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