如何将函数作为参数传递给TypeScript中的Promise?

时间:2016-11-06 20:07:14

标签: javascript typescript promise closures

当尝试为异步DynamoDB调用编写包装类时,我尝试用函数调用包装所有return语句失败了:

function composePromise(method: (params: any, callback: (err, res) => void) => void, params: any): Promise<any> {
    return new Promise<any>((resolve, reject) =>
        method(params, (err, res) => {
            if (err) reject(err);
            else resolve(res);
        })
    );
}

create(params: any): Promise<any> {
    return composePromise(this._db.put, params);
}

这很奇怪,因为我在create中移动承诺后没有任何改变,它就有用了。

create(params: any): Promise<any> {
    return new Promise<any>((resolve, reject) =>
        this._db.put(params, (err, res) => {
            if (err) reject(err);
            else resolve(res);
        })
    );
}

所以我猜这可能是一些关闭问题,但无法弄清楚原因。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

我认为this._db.put可能是this._db上声明的其他函数的快捷方式,如果是,那么该方法可能正在使用this,那就是它失败的地方。

您应该将正确的上下文绑定到该函数

create(params: any): Promise<any> {
    return composePromise(this._db.put.bind(this._db), params);
}