Javascript Promise未解析,但正在Promise回调内部到达resolve()
我正在尝试编写一个类似于Laravel中的查询生成器的查询生成器,但是对于TypeScript,我遇到了一个问题 在下面的代码中,我减少了生成器和控制器类。使用这个库,我使用codeJavascript Promise未解析,但正在Promise回调内部到达resolve(),javascript,mysql,typescript,es6-promise,Javascript,Mysql,Typescript,Es6 Promise,我正在尝试编写一个类似于Laravel中的查询生成器的查询生成器,但是对于TypeScript,我遇到了一个问题 在下面的代码中,我减少了生成器和控制器类。使用这个库,我使用codeconnection.query(…)运行一个查询,我将其传入一个回调函数,该函数处理响应并相应地解析/拒绝。我不明白的是,它到达了控制台.log并将其输出到我的控制台,但是没有调用控制器中的.then() import*作为mysql从“mysql”导入; 接口InternalQueryReturnType{ 结果
connection.query(…)
运行一个查询,我将其传入一个回调函数,该函数处理响应并相应地解析/拒绝。我不明白的是,它到达了控制台.log
并将其输出到我的控制台,但是没有调用控制器中的.then()
import*作为mysql从“mysql”导入;
接口InternalQueryReturnType{
结果:T;
字段?:mysql.FieldInfo[];
}
//我的生成器的精简版本。
导出类MySQLBuilder实现IQueryBuilder{
受保护查询(查询:字符串):承诺{
返回新承诺((解决、拒绝)=>{
const connection=mysql.createConnection({
主机:“localhost”,
用户:'根',
密码:“”,
数据库:“dbname”,
港口:999,
});
connection.connect({},(错误)=>{
拒绝(错误);
});
查询(查询,(错误、结果、字段)=>{
如果(错误){
拒绝(错误);
返回;
}
//它正在达到这一点。
console.log({results});//{
返回新承诺((解决)=>{
//测试生成器创建的原始查询。
新建MySQLBuilder().query('SELECT*FROM'users',其中'id`=1 LIMIT 1 OFFSET 0')
。然后({results})=>{
//这里面什么都没有。
log({results});
解析(新的JsonResponse(results |{}));
})
.catch((错误)=>{
解析(新的JsonResponse(错误).status(400));
});
//生成器代码。
//新的MySQLBuilder().table('用户')
//.where('id','=',1)
//.first()
//.然后((值:object | null)=>{
//console.log(值);
//解析(新JsonResponse(值|{}));
// })
//.catch((错误)=>{
//console.error({error});
//解析(新的JsonResponse(错误).status(400));
// });
});
});
}
}
有没有人在承诺方面遇到过这样的问题
如果你需要完整的代码库,我可以在以后把它全部放上去,但这应该足够了
这个问题的解决办法实际上是:
connection.connect({},(错误)=>{
如果(错误){
拒绝(错误);
}
});
这个问题的解决方案实际上是:
connection.connect({},(错误)=>{
如果(错误){
拒绝(错误);
}
});
我没有检查错误是否为NULL。所以没有调用
.then
。是否调用了.catch
(返回400个错误)?没关系,我是一个特殊的雪花。问题是连接.connect()不检查错误是否为空LOL。您的许多允诺构造函数是奇数的,应该重构,但是如果代码是按原样显示的,它们不应该引起有趣的问题。我认为这是一个与<代码>有关的bug。Connect 方法。如果有错误,它应该包含某种信息。,会认为错误意味着没有错误。在他们的文档中,它确实显示了捕获错误然后抛出错误的所有示例。我会认为是在给出多个参数的函数之间保持一致。例如,(错误、结果、字段)
。尽管我正在考虑寻找一个不同的MySQL库,因为这个库不支持预先准备好的语句,而且我也不打算推出任何类似的实时版本。