在 promise 回调中使用参数时,无法将参数传递给 class 方法

Can't pass arguments to class methods, when using them in a promise callback

我有一个 class:

'use strict';
class aClass {
    a() {
        return new Promise((resolve, reject) => {
            if (1 != 1) {
                reject(new Error('error'));
            } else {
                resolve('a');
            }
        });
    }
    b(b) {
        return new Promise((resolve, reject) => {
            if (1 != 1) {
                reject(new Error('error'));
            } else {
                resolve('b');
            }
        });
    }
    c(c) {
        console.log(c);
    }


    do()  {
        this.a()
            .then((a) => {
                this.b(a);
            })
            .then((b) => {
                console.log(b);
                this.c(b);
            }).catch((error) => {
                console.log('err', error);
            });
    }
}

module.exports = aClass;

当我创建 class 的对象并调用 do() 方法时:

let anObject = new aClass();
anObject.do();

"undefined" 在控制台中记录了两次。这意味着在 b() 方法中参数没有传递给承诺解析:resolve('b');

同时,如果我不使用 class 方法,而是直接在回调中添加代码:

do()  {
    this.a()
        .then((a) => {
            return new Promise((resolve, reject) => {
                if (1 != 1) {
                    reject(new Error('error'));
                } else {
                    resolve('b');
                }
            });
        })
        .then((b) => {
            console.log(b);
            this.c(b);
        }).catch((error) => {
            console.log('err', error);
        });
}

一切正常,"b"在控制台中记录了两次。

我在这个例子中使用 nodejs 并使用 babeljs 作为转译器。 为什么我使用 class 方法时没有传递参数?是否有任何范围限制,或者它是一个编译器问题?

在:

.then((a) => {
  this.b(a);
})

你没有 return 任何东西,所以 undefined 被返回 - 这进入

.then((b) => {
   console.log(b);
   this.c(b);
})

既记录它又将它传递到 c,后者也记录它。

尝试将您的代码更改为:

.then((a) => {
  return this.b(a);
})