Javascript 承诺决议
我不熟悉javascript承诺,我正在使用以下来自NativeScript的代码查询sqlite数据库,如果行存在,我只想返回Javascript 承诺决议,javascript,web,nativescript,Javascript,Web,Nativescript,我不熟悉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 => { re
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,这就是承诺的要点,您无法在javascript中异步返回某些内容 但是,您可以直接返回您正在创建的承诺,然后调用
。然后调用它
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');
}
});
抱歉,是从iphone 5s尝试的,从手机进行格式化有点困难,但是是的,我已经编辑了答案。避免!我按照你说的做了,它仍然返回false
始终:(你还需要返回第一个然后句柄的内部承诺是的,忘记了内部承诺。谢谢!可能是
function hasBookmark(url) {
return new Promise((resolve, reject) => {
(new Sqlite("pakjobs.db")).then(db => {
db.all("SELECT url FROM bookmarks WHERE url=?", [url]).then(rows => {
resolve(rows.length ? true : false)
}, error => {
console.log("hasBookmark ERROR", error);
resolve(false);
});
}, error => {
console.log("hasBookmark ERROR", error);
resolve(false);
});
});
}
hasBookmark(url).then(function(isValid){
If(isValid){
// Do something
}
});