Javascript - Как я могу отправить свою переменную на мой интерфейс из обещания, которое я использую для запроса базы данных? - PullRequest
0 голосов
/ 03 декабря 2018

Это обещание, которое я использую.Я также использую пакет node-mssql.

const loadpictures = () => {
    sql.connect(config).then(pool => {
    return pool.request()
    .query('SELECT Top 20 PhotoURL As src, PostURL As link from Valley_Photos FOR JSON PATH')

    }).then((result) => {
            //console.dir(result);
            sql.close();
            return result['result'].typeOf();

        }).catch(err => {
           console.log(err)
           sql.close();

        })
}

loadpictures()
.then(result => console.log(results))
.catch( err => ErrorHandler(err) );

Я получаю ошибку:

TypeError: Cannot read property 'then' of undefined

В console.dir выводится нужный объект json.Я просто не знаю, как вытащить это.Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

then не определено, потому что вы не возвращаете обещание из функции.Если вам не нужно было использовать sql.close(), вы можете просто вернуть sql из функции, потому что это функция, которая возвращает обещание, но, поскольку вы это делаете, оберните вызов sql в обещание и разрешите / отклоните результаты/errors.

function loadpictures() {
  return new Promise((resolve, reject) => {
    sql
      .connect(config)
      .then(pool => {
        return pool.request().query(query)
      })
      .then(result => {
        sql.close();
        resolve(result['result'].typeOf());
      })
      .catch(err => {
        sql.close();
        reject(err);
      });
  });
}

loadpictures()
  .then(result => console.log(result))
  .catch(err => ErrorHandler(err));
0 голосов
/ 03 декабря 2018

Вы не возвращаете ни одного обещания из функции loadpictures, поэтому вы не можете использовать оператор then в своей главной.

Довольно просто вернуть второе обещание, которое вы используете с async/await:

const loadpictures = async () => {
    let pool = await sql.connect(config);
    let req = pool
      .request()
      .query('SELECT Top 20 PhotoURL As src, PostURL As link from Valley_Photos FOR JSON PATH')

     req.then((result) => {
            //console.dir(result);
            sql.close();
            return result['result'].typeOf();

        }).catch(err => {
           console.log(err)
           sql.close();

        })

     return req;
}

loadpictures()
.then(result => console.log(results))
.catch( err => ErrorHandler(err) );

С другой стороны, использование только обещаний является более многословным, потому что вы должны вернуть новое обещание, которое разрешается с результатом и отклоняется с ошибкой:

const loadpictures = () => {
    return new Promise((resolve, reject) => {
        sql.connect(config).then(pool => {
            return pool.request()
              .query('SELECT Top 20 PhotoURL As src, PostURL As link from Valley_Photos FOR JSON PATH')

        }).then((result) => {
           //console.dir(result);
           sql.close();
           resolve(result)
        }).catch(err => {
           console.log(err)
           sql.close();
           reject(err);
        })
    }
}

loadpictures()
.then(result => console.log(results))
.catch( err => ErrorHandler(err) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...