- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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()
处理程序中。
我发现您的代码存在三个主要问题:
results
时出现逻辑问题。.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/
我使用 resolver() 作为 socket() 的替代方法,因为我发现当多个连接建立到不同的 IP 时,它最终会停止工作。 无论如何它会向我返回一个警告,我应该使用 dns.resolver.R
我有这个代码: var promise1 = new Promise(function(resolve, reject) { setTimeout(() => { console
我仍在学习 PHP,我认为我不是母语人士,这并不难理解。 此时,看了一大堆文档,跳入了深水区,于是打开Laravel源文件,一个接一个地看,试图更好地理解MVC的整个实现,包括路由、中间件如何组合成一
public JsonResult GetEvents(double start, double end) { var userName = Session["UserName"] as st
我正在使用 bluebird,我看到了两种将同步函数解析为 Promise 的方法,但我不明白这两种方法之间的区别。看起来堆栈跟踪有点不同,所以它们不仅仅是一个别名,对吧? 那么首选的方式是什么? 方
我写了下面的代码: function readFile(path) { return new Promise(function(resolve, reject){ if(!fs
我正在使用 bluebird,我看到了两种将同步函数解析为 Promise 的方法,但我不明白这两种方法之间的区别。看起来堆栈跟踪有点不同,所以它们不仅仅是一个别名,对吧? 那么首选的方式是什么? 方
在某处读过这个例子: return new Promise( (resolve, reject) => { fs.readFile(file, (err, data) => { if (e
我刚开始学习 React,我一直在尝试让我的 React 应用程序连接到我的数据库 var mysql = require('mysql'); var con = mysql.createConnec
我需要从 $http 调用中返回一个 promise 中的自定义响应,以便我可以链接更多调用。我有两个可用的实现。有人可以解释两者之间的区别,并争论其中一个更好吗? 在 fooService.js 实
免责声明:这里实际上提出了两个问题,但我觉得它们密切相关。 我正在尝试将 promise 对象传递给指令,并且我想在 promise 解析后立即在指令中运行一些初始化代码。 在我的 Controlle
我正在尝试创建类似于 this code 的东西在 boost.asio 示例中找到。 套接字.h: class some_class { private: ... boost
正如我们所知,Promise 构造函数采用一个执行函数,该函数具有两个参数,我们使用它们来生成成功案例或失败案例。今天我在编程,我被卡住了,但后来我解决了这个问题,但我发现了一件事需要理解。 有什么区
我认为 Promise.resolve 和 new Promise(resolve) 可以互换。 考虑一下: A. new RSVP.Promise(function (resolve, reject
我下载了一个 Java 项目,我想研究并从中学习一些东西。当我在另一台计算机上下载它时效果很好,但是当我在我的计算机上尝试时,几乎每个声明和导入都会给出错误消息“* cannot be resolve
我昨天看到了一些有趣的编译器行为,我想我明白为什么会这样,但我想确定一下。所以,我不会写我的推理,只写事实。 请注意,我使用 vector 而不是 string 并不是错字。我是故意这样做的,这样编译
我正在尝试运行 Ember 测试,它给出了这个错误,提示无法找到从 `AppName/resolver 导入的模块 ember-resolver。 我不确定是什么原因造成的。我正在使用 Ember-c
Code#1 和 Code#2 的区别在于:Code#1 使用 resolve(p) 而 Code#2 使用 p.then(()=>resolve()) 。我希望输出序列是不变的,但它们会生成不同的序
IntelliJ IDEA 无法解析内置 JVM 类型和方法的常见原因有哪些?例如,当我将鼠标悬停在 String 上时,工具提示显示“无法解析符号“String””。就好像 IntelliJ 不知道
IntelliJ IDEA 无法解析内置 JVM 类型和方法的常见原因有哪些?例如,当我将鼠标悬停在 String 上时,工具提示显示“无法解析符号“String””。就好像 IntelliJ 不知道
我是一名优秀的程序员,十分优秀!