当尝试为异步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);
})
);
}
所以我猜这可能是一些关闭问题,但无法弄清楚原因。有人可以帮帮我吗?
答案 0 :(得分:1)
我认为this._db.put
可能是this._db
上声明的其他函数的快捷方式,如果是,那么该方法可能正在使用this
,那就是它失败的地方。
您应该将正确的上下文绑定到该函数
create(params: any): Promise<any> {
return composePromise(this._db.put.bind(this._db), params);
}