ES6中的函数未返回变量

时间:2018-10-25 23:48:56

标签: javascript sqlite ecmascript-6 expo

我正试图在ES6中返回一个变量,该变量中的数据已通过Expo中的SQLLite事务加载到该变量中,但是由于总是返回null,所以不确定如何执行此操作。

import {SQLite} from 'expo';
import React from 'react';
const db = SQLite.openDatabase('db.db');
class CoreApp extends React.Component{

getLoginTokens = () => {
    var result = [];
    db.transaction(success, tx => {
        tx.executeSql(
            `SELECT token FROM tokens LIMIT 1;`,
            [],
            (_, { rows: { _array } }) => {
                result = _array;
            }
        );
    });
};
}

class SelectTour extends React.Component {
    render() {
        //
        CoreApp.getLoginTokens();
    }
}

运行getLoginTokens时,我想返回结果,但是每次我console.log时,结果都是不确定的。

如果我在tx.executeSql的范围内,并且我运行console.log(_array),它将显示完整的数组。

在ES6中,如何正确设置结果?我当前正在使用result = _array;但结果不在交易之外。

1 个答案:

答案 0 :(得分:2)

使用承诺:

getLoginTokens = () => new Promise((resolve, reject) => {
    db.transaction(success, tx => {
        tx.executeSql(
            `SELECT token FROM tokens LIMIT 1;`,
            [],
            (_, { rows: { _array } }) => {
                resolve(_array);
            }
        );
    });
});

现在getLoginTokens返回一个Promise,您可以按常规方式使用

getLoginTokens.then(results => console.log(results));

旧学校的回叫

getLoginTokens = cb => {
    db.transaction(success, tx => {
        tx.executeSql(
            `SELECT token FROM tokens LIMIT 1;`,
            [],
            (_, { rows: { _array } }) => {
                cb(_array);
            }
        );
    });
};

用法

getLoginTokens(results => console.log(results));