我试图编写一个将节点式回调函数转换为promises的简单函数,因此我可以将它们与async / await一起使用。
当前代码:
function toPromise(ctx, func, ...args) {
let newPromise;
args.push((err, res) => {
newPromise = new Promise((resolve, reject)=> {
if(err) reject(err);
else{
resolve(res)
};
});
});
func.apply(ctx, args);
return newPromise;
}
示例用法:
const match = await toPromise(user, user.comparePassword, password);
//trying to avoid the following:
user.comparePassword(password, (err, res) => {
... });
对于一些优秀的图书馆来说,这可能没有任何意义,但我只是试图将其编码为练习。
问题当然是匹配评估为未定义,显然在await语法行之后,promise得到解决。
知道如何解决这个问题吗?
答案 0 :(得分:8)
自节点v8.0.0起,他们添加了SELECT * from eqDoesntExcist WHERE name = "Troy"
。
util.promisify
参考:https://nodejs.org/api/util.html#util_util_promisify_original
答案 1 :(得分:3)
您的问题是您正在构建异步回调内部的Collections.sort(ms, new Comparator<Municipio>() {
@Override
public int compare(final Municipio o1, final Municipio o2) {
// TODO compare o1 and o2:
// return 1; //if o1 > o2
// return -1; //if o1 < o2
// return 0; //if o1 == o2
}
});
。当你归还时you've still got undefined
。相反,您需要立即调用newPromise
构造函数,并仅将Promise
/ resolve
放入异步回调中:
reject