蓝鸟承诺链此参考



我正在努力解决一个具有多个函数的类。他们每个人都返回一个承诺。

我的问题是,在第一次返回 Promise 之后,下一个函数中的 this 引用不是类对象,而是全局节点对象。

下面是一些示例代码:

索引.js:

"use strict";
const debug = require("./dbg.js");
const testClass = require("./testClass.js");

const dbg = new debug();
const tc = new testClass(dbg);

tc.printTestMessage()
    .then(tc.Test1)
    .then(tc.Test2)
    .then(tc.Test3);

测试类.js:

"use strict";

const Promise = require("bluebird");
let testClass = function(dbg) {
let self = this;
self._dbg = dbg;

};
testClass.prototype.printTestMessage = function() {
    let self = this;
    return new Promise(function(resolve) {
        self._dbg.printDebug(3, "testClass - printTestMessage", "start printing...");
        setTimeout(function() {
            self._dbg.printDebug(3, "testClass - printTestMessage", "finished printing...");
        resolve();
        }, 2000);
    });
};

testClass.prototype.Test1 = function() {
    let self = this;
    return new Promise(function(resolve) {
        self._dbg.printDebug(3, "testClass - Test1", "start printing...");
        setTimeout(function() {
            self._dbg.printDebug(3, "testClass - Test1", "finished printing...");
            resolve();
        }, 2000);
    });
};

testClass.prototype.Test2 = function() {
    let self = this;
    return new Promise(function(resolve) {
        self._dbg.printDebug(3, "testClass - Test2", "start printing...");
       setTimeout(function() {
            self._dbg.printDebug(3, "testClass - Test2", "finished printing...");
            resolve();
        }, 2000);
    });
};

testClass.prototype.Test3 = function() {
    let self = this;
    return new Promise(function(resolve) {
        self._dbg.printDebug(3, "testClass - Test3", "start printing...");
        setTimeout(function() {
            self._dbg.printDebug(3, "testClass - Test3", "finished printing...");
            resolve();
        }, 2000);
    });
};


module.exports = testClass;

关于如何将每个函数粘贴到类引用的任何帮助?

我自己找到了它:每个新的承诺都必须在末尾添加 .bind(self(。

例如:

testClass.prototype.Test3 = function() {
    let self = this;
    return new Promise(function(resolve) {
        self._dbg.printDebug(3, "testClass - Test3", "start printing...");
        setTimeout(function() {
            self._dbg.printDebug(3, "testClass - Test3", "finished printing...");
            resolve();
        }, 2000);
    }).bind(self); //<-- this is the important part
};

最新更新