Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Выполнение задачи при положительном результате другой задачи (https://javascript.ru/forum/node-js-io-js/74854-vypolnenie-zadachi-pri-polozhitelnom-rezultate-drugojj-zadachi.html)

SorryHanzoMain 12.08.2018 12:21

Выполнение задачи при положительном результате другой задачи
 
Есть код
client.on("message", async message => {
    const name = ["Captain"]
    const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
 const command = args.shift().toLowerCase();
    if (message.content.indexOf(prefix) !== 0) return;
if(command == "вход"){
    sql.get('SELECT * FROM users WHERE name LIKE ?', [name]).then(() => {
    if(){
        message.channel.send("у вас нет прав на это действие")
    }
    if(){
        message.channel.send("В ведите пароль")
            
            }
        })
    }

Как видно на 8 и 11 строке ошибки. Нужно,чтобы действие на 8 строке срабатывало, если сравнение на 7 прошло не успешно, а на 11 наоборот если сравнение успешно.

stweet 21.08.2018 14:34

sql.get() // Должен же что то возвращать?

// т.е.
sql.get().then(result => { /* ... */ } )

// а не
sql.get().then(() => { /* ... */ } )

// Ну а далее
client.on("message", async message => {

	const name = ["Captain"]
	const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
	const command = args.shift().toLowerCase();

	if (message.content.indexOf(prefix) !== 0) return;

	if (command == "вход") {

		sql.get('SELECT * FROM users WHERE name LIKE ?', [name]).then(res => {
			// если есть ответ от ДБ
			if (res) {
				// идем далее
				message.channel.send("В ведите пароль")
			} else {
				// ругаемся.
				message.channel.send("у вас нет прав на это действие")
			}
		})
	}
})

Audaxviator 21.08.2018 16:59

А мне вот интересно, всюду, где не попадя, объявлять константы - это признак хорошего тона или особой крутизны?

Alexandroppolus 21.08.2018 17:05

ещё более странно - объявить функцию как async, но не использовать await )

SorryHanzoMain 21.08.2018 18:36

Насколько я знаю sql.get это - запрос. Его как-то можно вернуть(callback)
и из callback получить результат запроса. Можно ли это как-то осуществить?

Alexandroppolus 21.08.2018 18:50

SorryHanzoMain,
sql.get(...) возвращает промис
результат запроса попадает в ту функцию, которую ты передал в then
ошибки выполнения идут во вторую функцию в then

https://learn.javascript.ru/promise

и глянь в документации по этому твоему пакету sql, в каком формате приходит ответ или ошибка

----
раз уж заявлен async/await, то пусть тогда используется на самом деле:
try {
  var res = await sql.get('SELECT * FROM users WHERE name LIKE ?', [name]);
  // далее обрабатываем полученные данные
} catch(error) {
  // тут что-то делаем если запрос не смог.
}

SorryHanzoMain 21.08.2018 20:04

Alexandroppolus
и глянь в документации по этому твоему пакету sql, в каком формате приходит ответ или ошибка
Нашёл только документацию на английском.
https://libraries.io/npm/sqlite
Сам код изменился, в нём нет async
client.on("message", request => {
        const REQUIRED_PREFIX = '?';
        const message = request.content.toString().trim();
    
        if (message.substr(0, 1) !== REQUIRED_PREFIX)
            return false
            
            sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', [message]).then(res => {
                if (res= false)
                    return void sql.run('INSERT INTO вопросы (вопрос) VALUES (?)', [message]).then(() => {
                        request.reply("Извини, я этого пока не знаю, но это не надолго")
                    });
                if(res= true){
                    sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', ["true"]).then(res => {
                    if(res= false){
                        sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', ["false"]).then(res => {
                            if(res=true){
                                request.reply("нет")
                            }else{request.reply("незнаю")}
                    })
                }
                if(res=true){
                    request.reply("да")
                }
            })}})})


Часовой пояс GMT +3, время: 03:09.