nodejs는 결과를 반환하기 전에 비동기 func가 완료되기를 기다리지 않습니다.

트레버 우드

nodejs로 간단한 API를 만들려고합니다. 그러나 나는 nodejs가 SQL 쿼리가 끝날 때까지 기다릴 수 없습니다.

쿼리가 완료 될 때까지 nodejs가 기다리도록하려면 어떻게해야합니까? await / async를 잘못 사용하고 있습니까?

여기서 목표 d는 쿼리가 완료된 후에 만 반환 하는 것입니다.

데이터베이스 파일

const DB_HOSTNAME = "localhost";
const DB_NAME = "testerino";
const DB_PORT = "8889";
const DB_USERNAME = "root";
const DB_PASSWORD = "root";

const mysql = require('mysql');

const con = mysql.createConnection({
  host: DB_HOSTNAME,
  user: DB_USERNAME,
  password: DB_PASSWORD,
  database: DB_NAME,
  port: DB_PORT
});

con.connect(function(err) {
  if (err) throw err
  console.log("Connected to database");
});

async function query(sql){

  var results = await con.query(sql);
  console.log("foo completed")
  return results

}

module.exports = {
  con: con,
  query: query
}

userLogin 파일

const db = require('../../common/database');

function attemptUserLogin(usernameOrEmail, password){
  var d = {err: [], res: {}};

  console.log("attemptUserLogin");
  const foo = db.query("SELECT * FROM users");
  console.log("This should wait for foo to complete");

  return d;
}

module.exports = {
  attemptUserLogin: attemptUserLogin
};

결과

Connected to database
attemptUserLogin
This should wait for foo to complete
foo completed

^ 그것은 기다리고 있지 않습니다

Shubh

callback와 함께 사용할 필요가 없습니다 await. con.query()함수가를 반환 하는지 확인하십시오 promise.

async function query(sql){

      var results = await con.query(sql); // the result will be stored in results variable ,once the promise is resolved
    console.log(results) // the query result will be printed here
      return results // the result will be wrapped in promise and returned
    }

위의 함수는 약속이 해결되고 반환 된 데이터가 결과 변수에 저장 될 때만 결과를 반환합니다.

이제 위의 함수를 사용하여 데이터를 얻으려면 두 가지 방법으로 수행 할 수 있습니다.

1- 사용 then.

query().then(data=>{
console.log(data) // this variable data holds the value you returned from above query function

})

2-await를 사용하여 함수 호출 (하지만 비동기 함수에서 수행해야 함)

async function other()
{
let query_result=await query(); // it will return the data from query function above
}

답변을 참조하십시오 . 데이터를 쿼리하는 모든 가능한 경우에 대해 논의했습니다.

편집-문제는 attemptUserLogin 함수에 있습니다. 비 동기화해야합니다.

async function attemptUserLogin(usernameOrEmail, password){
  var d = {err: [], res: {}};

  console.log("attemptUserLogin");
  const foo = await db.query("SELECT * FROM users"); // use await here
  console.log(foo);// result from query function above

  return d;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

반환하기 전에 mongoose .exec () 함수가 완료되기를 기다리는 방법은 무엇입니까?

분류에서Dev

일부 동기화 코드를 실행하기 전에 JS 비동기 함수가 완료되기를 기다리는 중

분류에서Dev

비동기 함수가 foreach를 완료하기를 기다리는 NodeJS

분류에서Dev

for 루프에서 비동기 쿼리가 완료되기를 기다리는 방법은 무엇입니까?

분류에서Dev

페이지를 새로 고침하기 전에 UPDATE가 완료되기를 기다리는 중

분류에서Dev

비동기 메서드가 완료되기를 기다리는 중

분류에서Dev

ThreadPoolExecutor는 마지막 스레드가 완료되기 전에 새 스레드를 시작하지 않습니다.

분류에서Dev

값을 반환하기 전에 다른 이벤트가 완료되기를 기다리는 방법은 무엇입니까?

분류에서Dev

이전에 기능 완료를 기다리지 않는 기능?

분류에서Dev

제거하기 전에 반복되는 CAAnimation이주기를 완료 할 때까지 기다리는 방법

분류에서Dev

다른 게시를 시작하기 전에 하나의 게시가 완료되기를 기다리는 중

분류에서Dev

약속의 모든 코드가 해결되기 전에 완료되기를 기다리는 방법은 무엇입니까? (하지만 조금 더 복잡함)

분류에서Dev

저장하기 전에 찾기가 완료되기를 기다리는 몽구스

분류에서Dev

모든 반복이 완료되기를 기다리는 비동기 람다가있는 Parallel.ForEach

분류에서Dev

Nodejs는 for 루프가 mysql 쿼리로 완료되기를 기다립니다.

분류에서Dev

JavaScript 비동기 루프가 결과를 반환하지 않습니다.

분류에서Dev

SwingWorker가 다른 작업을 실행하기 전에 완료되기를 기다리는 중

분류에서Dev

2 개의 비동기 메서드 중 하나가 결과를 반환하기를 기다리는 중

분류에서Dev

계속하기 전에 객체 생성자 내부의 메서드가 완료되기를 기다리는 중

분류에서Dev

Realm 쓰기가 완료되기를 기다리는 중

분류에서Dev

템플릿을 렌더링하기 전에 데이터가 반환되기를 기다리지 않는`필요`

분류에서Dev

신청이 계속되기 전에 두 번째 프로세스가 완료되기를 기다리는 중

분류에서Dev

비동기 함수는 반환하기 전에 await로 기다리지 않습니다.

분류에서Dev

nodejs server.address () 메서드는 'listening'이벤트가 발생하기 전에 결과를 반환합니다.

분류에서Dev

angularjs는 메시지를 표시하기 전에 3 개의 서비스가 완료되기를 기다릴 것을 약속합니다.

분류에서Dev

비동기 쿼리를 실행하고 완료되면 결과를 반환합니다.

분류에서Dev

비동기 읽기가 완료되었지만 버퍼에 예상 결과가 없습니다.

분류에서Dev

React Redux-다음 작업이 전달되기 전에 비동기 API 호출이 완료되기를 기다리는 중

분류에서Dev

Javascript forEach-반복하기 전에 setTimeout이 완료되기를 기다리는 중

Related 관련 기사

  1. 1

    반환하기 전에 mongoose .exec () 함수가 완료되기를 기다리는 방법은 무엇입니까?

  2. 2

    일부 동기화 코드를 실행하기 전에 JS 비동기 함수가 완료되기를 기다리는 중

  3. 3

    비동기 함수가 foreach를 완료하기를 기다리는 NodeJS

  4. 4

    for 루프에서 비동기 쿼리가 완료되기를 기다리는 방법은 무엇입니까?

  5. 5

    페이지를 새로 고침하기 전에 UPDATE가 완료되기를 기다리는 중

  6. 6

    비동기 메서드가 완료되기를 기다리는 중

  7. 7

    ThreadPoolExecutor는 마지막 스레드가 완료되기 전에 새 스레드를 시작하지 않습니다.

  8. 8

    값을 반환하기 전에 다른 이벤트가 완료되기를 기다리는 방법은 무엇입니까?

  9. 9

    이전에 기능 완료를 기다리지 않는 기능?

  10. 10

    제거하기 전에 반복되는 CAAnimation이주기를 완료 할 때까지 기다리는 방법

  11. 11

    다른 게시를 시작하기 전에 하나의 게시가 완료되기를 기다리는 중

  12. 12

    약속의 모든 코드가 해결되기 전에 완료되기를 기다리는 방법은 무엇입니까? (하지만 조금 더 복잡함)

  13. 13

    저장하기 전에 찾기가 완료되기를 기다리는 몽구스

  14. 14

    모든 반복이 완료되기를 기다리는 비동기 람다가있는 Parallel.ForEach

  15. 15

    Nodejs는 for 루프가 mysql 쿼리로 완료되기를 기다립니다.

  16. 16

    JavaScript 비동기 루프가 결과를 반환하지 않습니다.

  17. 17

    SwingWorker가 다른 작업을 실행하기 전에 완료되기를 기다리는 중

  18. 18

    2 개의 비동기 메서드 중 하나가 결과를 반환하기를 기다리는 중

  19. 19

    계속하기 전에 객체 생성자 내부의 메서드가 완료되기를 기다리는 중

  20. 20

    Realm 쓰기가 완료되기를 기다리는 중

  21. 21

    템플릿을 렌더링하기 전에 데이터가 반환되기를 기다리지 않는`필요`

  22. 22

    신청이 계속되기 전에 두 번째 프로세스가 완료되기를 기다리는 중

  23. 23

    비동기 함수는 반환하기 전에 await로 기다리지 않습니다.

  24. 24

    nodejs server.address () 메서드는 'listening'이벤트가 발생하기 전에 결과를 반환합니다.

  25. 25

    angularjs는 메시지를 표시하기 전에 3 개의 서비스가 완료되기를 기다릴 것을 약속합니다.

  26. 26

    비동기 쿼리를 실행하고 완료되면 결과를 반환합니다.

  27. 27

    비동기 읽기가 완료되었지만 버퍼에 예상 결과가 없습니다.

  28. 28

    React Redux-다음 작업이 전달되기 전에 비동기 API 호출이 완료되기를 기다리는 중

  29. 29

    Javascript forEach-반복하기 전에 setTimeout이 완료되기를 기다리는 중

뜨겁다태그

보관