これはnoobの質問かもしれませんが、私はpromiseを初めて使い、node.jsで [〜#〜] q [〜#〜] を使用する方法を見つけようとしています。
tutorial は、
_promiseMeSomething()
.then(function (value) {}, function (reason) {});
_
しかし、_.then
_がどこから来たのか正確には把握できません。から来ると思う
_var outputPromise = getInputPromise()
.then(function (input) {}, function (reason) {});
_
しかし、getInputPromise()
はどこから来たのでしょうか?私はそれの前の言及を見つけません。
私は自分のプロジェクトにそれを含めました
_var Q = require('q');
// this is suppose, the async function I want to use promise for
function async(cb) {
setTimeout(function () {
cb();
}, 5000);
}
async(function () {
console.log('async called back');
});
_
この例でQ
とその_.then
_を使用するにはどうすればよいですか?
promiseMeSomething()
はQのpromiseオブジェクトを返します。このオブジェクトにはthen
関数があり、これは defined です。
Promise.prototype.then = function (fulfilled, rejected, progressed) {
Promiseオブジェクトを作成する最も簡単な方法は、次のようにQ
関数コンストラクターを使用することです
new Q(value)
新しいpromiseオブジェクトを作成します。次に、このように成功および失敗ハンドラーをアタッチできます
new Q(value)
.then(function(/*Success handler*/){}, function(/*Failure handler*/){})
さらに、単一のnodejsスタイルの関数を.then
関数に渡すと、次のような成功値でその関数が呼び出されます
callback(null, value)
または問題がある場合は、
callback(error)
特定のケースでは、setTimeout
は最初のパラメーターとして呼び出される関数を受け入れます。したがって、Promiseを実際に機能させるには、かなりの数行のコードが必要です。そのため、Q
には便利な関数があり、この目的のために Q.delay
があり、これは次のように使用できます。
var Q = require('q');
function async() {
return Q.delay(1000)
}
async()
.then(function() {
console.log('async called back');
});
このように短く書くことができます
Q.delay(1000)
.then(function() {
console.log('async called back');
});
他の値でコールバック関数を呼び出したい場合は、次のようにできます
Q.delay(1000, "Success")
.then(function(value) {
console.log('async called back with', value);
});
これは、2つの関数の間に遅延が必要で、2番目の関数が最初の関数に依存している場合に役立ちます。