如何从 React Native 中的 SQLite 查询中 return 另一个函数中的数据

How to return data in another function from a SQLite query in React Native

我是 React Native 的新手,我正在尝试从查询中推断数据,但“return”不起作用。也许是因为它需要承诺,我试过了,但我还不够好。我在 App 函数的视图组件中调用函数(在 App.js 中),像这样

<View>Search()</View>

但没有显示任何内容。如果我将 console.log 放入 search() (在另一个函数中)我可以看到结果,但我不能 return 它在我的 App.js 中(该函数已正确导入应用)

export function Search() {

        db.transaction(
          (tx) => {
            tx.executeSql("select pver from profile where id=12524234", [],
            (tx, results) => {
              var a = JSON.stringify(results.rows._array[0].pver)
              var data = Number(a)
              return data;
            });
          },
          null,
        )
      };

这就是我根据用户的建议尝试做的事情

//this in App.js
import {Search} from './Funzioni'

export default function App() {
const [searchResult, setSearchResult] = useState();


useEffect(() => {
  console.log("we are in the useeffect")
    Search().then((data)=>{
      console.log("set") //doesn't appear
        setSearchResult(data)
 })
},[]);

//other codes

return (<View>{searchResult}</View> )
}



//this in "Funzioni.js"

 export async function Search() {
        return new Promise((resolve, reject) => {
            db.transaction(
                (tx) => {
                  tx.executeSql("select pver from profile where id=12524234", [],
                  (tx, results) => {
                    var a = JSON.stringify(results.rows._array[0].pver)
                    var data = Number(a)
                    console.log("the data: " + data) //doesn't appear
                    resolve(data);
                  });
                },
                null,
              )
        });
      };

当您呈现组件时,事务方法是异步的,搜索功能仍未解析。

在您的组件中,您应该使用 useState 来存储数据并使用 useEffect 来获取数据

const [searchResult, setSearchResult] = useState('');
useEffect(() => {
    Search().then((data)=>{
        setSearchResult(data)
    }).catch((error) => console.log(error));
},[]);
return <View>{searchResult}</View>

你的搜索功能应该是这样的

export async function Search() {
    return new Promise((resolve, reject) => {
        const db = SQLite.openDatabase('THE_NAME_OF_YOUR_DATABASE.db')
        db.transaction(
            (tx) => {
              tx.executeSql("select pver from profile where id=12524234", [],
              (tx, results) => {
                var a = JSON.stringify(results.rows._array[0].pver)
                var data = Number(a)
                resolve(data);
              },
              function (error) {
                  reject(false);
                  throw new Error(
                      'Error: ' + error
                  );
              });
            },
            function (error) {
                reject(undefined);
                throw new Error('error: ' + error.message);
            },
            function () {
                console.log('ok');
            }
          )
    });
  };