首页 > 解决方案 > 承诺决议

问题描述

我是 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否则?

谢谢您的帮助

标签: javascriptwebnativescript

解决方案


您将无法返回 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');
    }
});

推荐阅读