我正试图在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
;但结果不在交易之外。
答案 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));