Обещание резолюции - PullRequest
       9

Обещание резолюции

0 голосов
/ 25 августа 2018

Я новичок в обещаниях 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 в противном случае?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 25 августа 2018
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
   }
});
0 голосов
/ 25 августа 2018

Вы не сможете вернуть true или false, в этом и заключается смысл Обещаний, вы не можете вернуть что-то асинхронно в javascript.

Однако то, что вы можете сделать, - это прямой возвратобещание, которое вы создаете, а затем вызываете .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');
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...