gpt4 book ai didi

javascript - 手动 Bluebird promise 中的resolve()

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:21 25 4
gpt4 key购买 nike

super 基本问题:我是nodeJS和Promises的新手,很好奇我是否正确使用了resolve()。

   _queryHelper( query, fields )
{
return new Promise( ( resolve, reject ) => {
connector.query( query, fields, ( error, results ) => {
if( error )
{
connector.rollback( () => {
reject( error );
} );
}
if( results )
{
return resolve( results );
}
resolve();
});
});
};

// later on doing something like:
this._queryHelper( 'SELECT * FROM secretTable WHERE `generatedURL` = ?', stringIn )
.then( ( resultsIn ) => {
if( !resultsIn || resultsIn.length === 0 ) {
// do somthing
}
else {
// do something else
}
});

所以直接的问题是,当我使用 .then() 时,我是否正确地冒泡出原始 Promise 查询的结果?基本上,我试图确定我原来的“返回解析(结果)”实际上去哪里,以便我可以访问上述“结果”

编辑:当从_queryHelper调用resolve(results)时,我是否正确理解“results”作为“resultsIn”传递给我的.then?

最佳答案

如果您只是询问您的代码是否有效,那么是的,当您没有错误时,您的结果值应该显示在您想要的位置。

resolve(results) 将使 results 显示在您的 .then() 处理程序中。

我发现您的代码存在三个主要问题:

  1. 您的错误处理无法正常工作。
  2. 未定义 results 时出现逻辑问题。
  3. 您缺少一个 .catch() 来处理错误。

如果没有结果,则您的 .then() 处理程序内部存在逻辑问题,因为:

if (results.length) 

结果未定义时抛出。为了安全起见,您可以将 if 更改为:

if (!results || results.length === 0)
<小时/>

您还应该解决出现错误时遇到的问题,这样您就不会在出现错误时调用 resolve()。我建议更改为:

   _queryHelper(query, fields) {
return new Promise((resolve, reject) => {
connector.query(query, fields, (error, results) => {
if (error) {
connector.rollback(() => {
reject(error);
});
} else {
resolve(results);
}
});
});
};

// later on doing something like:
this._queryHelper('SELECT * FROM secretTable WHERE `generatedURL` = ?', stringIn).then((resultsIn) => {
if (!resultsIn || resultsIn.length === 0) {
// do somthing
} else {
// do something else
}
}).catch(err => {
// handle errors here
});

关于javascript - 手动 Bluebird promise 中的resolve(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42933295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com