15

以下の例からテキストの値を取得するにはどうすればよいですか?

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には上記の呼び出しの同期バージョンがあることを認識しています。私の目標は、deferedがこのライブラリでどのように機能するかを理解することです。

4

5 に答える 5

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) } );
于 2012-11-14T00:52:15.767 に答える
10

Promiseの.then()メソッドを介して値を取得できます。

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

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

また、エラー ハンドラーは、2 番目の引数として、.then()または.fail()メソッドと共に渡すことができます。

read().fail(function (err) {
    console.log(err);
});
于 2012-09-20T06:25:31.393 に答える
2
deferred.promise.then(function (text) {
  console.log(text); // Bingo!
});
于 2012-09-20T07:18:56.283 に答える
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

于 2012-09-20T06:07:00.760 に答える
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 ));
});
于 2014-03-06T17:05:28.203 に答える