Node.js

Promise { <pending> } 이 뜬다.

리콜 2023. 10. 10. 22:57

상품을 검색해서 가져오는 get요청의 restful api를 만들려고 하였다.

 

먼저 상품 관련한 라우터를 관리해줄 파일을 만들어주고

 

product.js

const express = require('express');
const router = express.Router();
const ctrl = require('./product.ctrl');

router.post('/detailInfo', ctrl.process.detailInfo);
router.post('/setProd', ctrl.process.saveProduct);
// router.patch('/edit', ctrl.process.edit);
router.get('/search', ctrl.process.search);
module.exports = router;

 

그 뒤 수행하는 컨트롤을 구현한 파일을 만들었다.

const bodyParser = require('body-parser');
const Product = require('../../models/Product');
const { response } = require('../../../app');


const process = {
    detailInfo : async (req, res) => {
        //상품 정보 db에서 가져와서 리턴
        const product = new Product(req.body);
        const response = await product.getProductData();
        console.debug(response);
        return res.status(200).json(response);
        
    },
    saveProduct : async (req, res) => {
        //body로 받은 데이터 저장
        const product = new Product(req.body);
        const response = await product.setProductData();
        return res.status(200).json(response);

    },

    // edit: async (req,res) =>{
    //     //body로 받은 데이터로 정보 수정



    // },

    search: async (req, res) =>{
        //키워드 받아서 select like문
        const encoded = req.query.keyword
        const decoded = decodeURIComponent(encoded);
        const product = new Product(decoded);
        const result = await product.search();
        console.log(result[0]);
        return res.status(200).json(result);
    }

}
module.exports = {
    process,
};

get요청에서 url에 넣은 데이터가 인코딩되어 값이 들어와서

decodeURIComponet를 사용하면 다시 decode를 할 수 있었다. 

그 뒤 Product객체를 만들고 Product내장 함수인 search를 이용하여 데이터베이스에서 검색을 진행하여

가져온 값인 배열을 result에 넣어주는 것이었다. 

 

지금은 완성된 코드 이지만 

수정하기 전인

search: async (req, res) =>{
        //키워드 받아서 select like문
        const encoded = req.query.keyword
        const decoded = decodeURIComponent(encoded);
        const product = new Product(decoded);
        const result = product.search();
        console.log(result[0]);
        return res.status(200).json(result);
    }

인 상태에서는 

result[0] 값이 Promise { <pending> } 이 떴었다.

 

pending은

MDN 문서 Promise

Promise에서 pending은 아직 아무것도 실행되지 않은 초기의 상태로서

pending이 떴다는 것은 실행결과를 받아오지 않았는데 비동기적으로 데이터를 받아서 발생한 것이다.

 

pending이 떴다면

async/await나 then을 사용하여 동기로직을 잘 살펴 보아야한다.

반응형