javascript - 承诺决议
问题描述
我是 javascript 承诺的新手,我正在使用来自 NativeScript 的以下代码来查询 sqlite 数据库,并且只想true
在行存在时返回,false
否则:
function hasBookmark(url) {
(new Sqlite("pakjobs.db")).then(db => {
db.all("SELECT url FROM bookmarks WHERE url=?", [url]).then(rows => {
return rows.length ? true : false;
}, error => {
console.log("hasBookmark ERROR", error);
return false;
});
}, error => {
console.log("hasBookmark ERROR", error);
return false;
});
return false;
}
但是函数总是返回false
.
任何人都可以告诉我如何返回true
如果行存在,false
否则?
谢谢您的帮助
解决方案
您将无法返回 true 或 false,这几乎就是 Promises 的重点,您不能在 javascript 中异步返回某些内容。
但是,您可以做的是直接返回您正在创建的 Promise,然后调用.then
它。
function hasBookmark(url) {
return (new Sqlite("pakjobs.db")).then(db => {
return db.all("SELECT url FROM bookmarks WHERE url=?", [url]).then(rows => {
return rows.length ? true : false;
}, error => {
console.log("hasBookmark ERROR", error);
return false;
});
}, error => {
console.log("hasBookmark ERROR", error);
return false;
});
}
const hasBookmarkPromise = hasBookmark('someurl');
hasBookmarPromise.then(value => {
if (value === true) {
console.log('has bookmarks');
}
});
推荐阅读
- c++ - 如何定义触发计算的 const getter?
- node.js - 如何解决 NJS 错误:012,添加日期的正确方法是什么?
- javascript - 将当前浏览器的源代码存储在 chrome 扩展中
- java - react-native-facebook-login:尝试登录导致 Instrumentation.java 错误
- javascript - 如果我们在 render 方法中调用异步函数会发生什么?
- java - 如何修改方法利用枚举成员
- c++ - 多行宏导致“预期声明”错误
- javascript - 如何在没有 cocoapod 的情况下在 0.60.0 版中创建反应原生应用程序?
- jquery - Ajax formdata文件上传进度百分比
- javascript - 使用 window.open 后更改 HTML 属性