Реагировать при передаче результата запроса в следующий вид, он пуст - PullRequest
0 голосов
/ 05 мая 2018

Я получил простое приложение с SQLite, я пытаюсь передать результат запроса следующему представлению в качестве параметра, но он всегда пуст.

Я получил scrollView Вот так с Button и ListView

            <TextInput placeholder="Marka" onChangeText={(text) => this.setState({brandSearch: text})}/>
            <TextInput placeholder="Model" onChangeText={(text) => this.setState({modelSearch: text})}/>
            <Button title="Wyszukaj"
                    color="#841584"
                onPress={() =>
                    navigate('SearchResultView', {data: this.searchCars})
                }
                     /*    onPress={this.searchCars}*/
            />

            <ListView
                enableEmptySections
                dataSource={this.state.data}
                renderSeparator={this.ListViewItemSeparator}
                renderRow={(rowData) =>
                    <View>
                        <Text style={{
                            textAlign: 'center',
                            fontWeight: "bold"
                        }}>{rowData.brand} {rowData.model} {rowData.power}km {rowData.color}</Text>

                        <Image
                            style={{width: null, height: 200}}
                            source={{uri: rowData.photos}}
                        />
                    </View>
                }
            />

        </ScrollView>

И функция для выполнения

searchCars() {
        var p = new Promise(function (resolve, reject) {
            db.transaction((tx) => {
                tx.executeSql("SELECT * FROM Car;", [], (tx, results) => {
                    var temp = [];
                    var len = results.rows.length;
                    for (let i = 0; i < len; i++) {
                        temp.push(results.rows.item(i));
                    }

                    resolve(temp);
                });
            });
        });

        p.then((result) => {
             return result;
        });
    };

1 Ответ

0 голосов
/ 05 мая 2018

Ваш метод searchCars вызывает p.then и возвращает результат в рамках этого вызова функции, но сам p не возвращается. По сути, searchCars ничего не возвращает.

function wrongSearchCars() {
  var p = new Promise(function (resolve, reject) {
        resolve('hello');
    });

    p.then((result) => {
         return result;
    });
}
function correctSearchCars() {
  var p = new Promise(function (resolve, reject) {
        resolve('hello');
    });

  return p.then((result) => {
         return result;
  });
}

wrongSearchCars().then(console.log) // undefined
correctSearchCars().then(console.log) // 'hello'

Кроме того, как вы можете видеть, поскольку блок .then внутри p внутри searchCars будет возвращать обещание, нет никаких оснований даже вызывать этот внутренний вызов .then.

searchCars() {
    return new Promise(function (resolve, reject) {
        db.transaction((tx) => {
            tx.executeSql("SELECT * FROM Car;", [], (tx, results) => {
                var temp = [];
                var len = results.rows.length;
                for (let i = 0; i < len; i++) {
                    temp.push(results.rows.item(i));
                }

                resolve(temp);
            });
        });
    });
};

Это мое предположение, основанное на том, что я вижу. В вашем коде пропущено много всего, что не может быть выведено.

...