3

Q promise のスコープはどのように機能しますか? 私の知る限り、「then」のコールバックは setTimeout のようにウィンドウによって呼び出されます。

この例では (それがどのように機能するかを理解するための単なる例です):

var getFileText = function() {
    var deferred = Q.defer();
    Server.readFile("foo.txt", "utf-8", function (error, text) {
        if (error) {
            deferred.reject(new Error(error));
        } else {
            deferred.resolve(text);
        }
    });
    return deferred.promise;
};

var Foo =  function () {
    getFileText().then(this.showFile);
};

Foo.prototype.showFile = function(text) {
    this.text = text;
    console.log(text);
};

var foo = new Foo();

foo のインスタンスにテキストを含めるには、bind を使用しています。

var Foo =  function () {
    getFileText().then(this.showFile.bind(this));
};

他に方法はありますか?

4

1 に答える 1

8

Q promise のスコープはどのように機能しますか?

コンテキストを探しています。

「then」のコールバックがウィンドウによって呼び出されることを知っています

まあ、グローバルな文脈では、そうです。として呼び出すように指定されています。undefinedthisArg

バインドを使用しています。他に方法はありますか?

インスタンスを参照する変数を持つ長いもののみ:

var that = this;
getFileText().then(function(text) {
    that.text = text;
    // or even longer:
    // that.showFile(text);
});
于 2013-07-11T14:24:08.533 に答える