Q.js - 使用延迟

时间:2012-09-20 03:53:13

标签: node.js deferred

如何从下面的示例中获取文本的值?

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;

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

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

我做错了什么(因为我只是从这里复制/粘贴示例:https://github.com/kriskowal/q#using-deferreds)或者我还需要做些什么来实际从文件中获取该文本?

我知道node.js上面有一个同步版本的调用 - 我的目标是了解deferred如何使用这个库。

5 个答案:

答案 0 :(得分:11)

请参阅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) } );

答案 1 :(得分:10)

您可以通过承诺的.then() method获取价值:

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

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

此外,错误处理程序可以作为第二个参数传递给.then()或使用.fail()方法:

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

答案 2 :(得分: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

答案 3 :(得分:2)

deferred.promise.then(function (text) {
  console.log(text); // Bingo!
});

答案 4 :(得分: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 ));
});