묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨웹 프론트엔드를 위한 자바스크립트 첫걸음
async pending상태의 promise객체
// promise 복습 promise 객체(executor 콜백함수(resolve, reject)) const delay= // delay는 ms값을 받아 promise 객체를 리턴 (ms)=>{return new Promise( // 인수로 함수를 받음, resolve(성공)를 인수로 받아 처리하는 지연함수(executor) (resolve)=>{setTimeout( // setTimeOut은 callback함수와 ms초값을 받음 ()=>{resolve();},ms);} ); } const start=()=>{delay(2000).then(()=>{console.log("대기");});} start(); // async const delay2= (ms)=>{return new Promise( (resolve)=>{setTimeout( ()=>{resolve();},ms);} ); } // 함수의 오른쪽에 작성 -> promise 객체 반환 const start2=async()=>{delay2(2000).then(()=>{console.log("async 대기");});} console.log(start2());섹션 4에 5강 async, await를 수강하던 중에 영상과 다른 결과가 출력 되어 질문 드립니다.두 코드의 결과를 서로 비교하고 싶어서 코드를 2개로 나누었는데요. async를 적은 코드는 pending상태의 promise객체가 나온다고 하셨는데 저는 계속 fulfilled가 나와서 제가 코드를 잘못 썼는지 질문 드리고 싶습니다. 위의 코드의 영향이 있을까 싶어 주석 처리 해도 결과는 같았습니다.
-
미해결JavaScript 비동기 프로그래밍 완벽 가이드 - Promise, await, async
Promise 객체 강의 7분 27초 부분 질문입니다.
const p = add(1,2);console.log(p); //Promise { <pending> }const t = p.then(....).catch(....).finally(...)이 때 총 4개의 각각 다른 프라미스가 생성된 상태라고 이해했습니다.1) p - 프라미스 P1 (add 에서 리턴한 프라미스)2) p.then - 프라미스 P2 (P1.then 에서 리턴한 프라미스)3) p.then().catch() - 프라미스 P3 (P2.catch 에서 리턴한 프라미스)4) p.then().catch.().finally() - 프라미스 P4 (P3.finally 에서 리턴한 프라미스)결과는 아래처럼 되는거라고 생각했구요.P1가 리졸브(3) 이므로 then 실행했고 3 출력, 리턴이 없으므로 리졸브-언디파인드P2는 fulfilled(리졸브-언디파인드) 이므로 catch 실행했고 에러가 아니므로 리졸브-언디파인드P3는 fulfilled(리졸브-언디파인드) / rejected 이므로 finally 실행했고 'finally' 출력, 리턴이 없으므로 리졸브-언디파인드P4는 함수반환과 관계없이 P3와 동일한 상태임. fulfilled(리졸브-언디파인드) 인데 등록된 콜백이 없으므로 이대로 끝.그런데 강의에서 설명하실 때는 P1 프라미스에then, catch, finally 함수로 콜백을 등록한 것처럼 느껴져서요.제가 이해한 내용이 맞는지 궁금합니다.
-
미해결JavaScript 비동기 프로그래밍 완벽 가이드 - Promise, await, async
안녕하세요. await async 강의 7분31초 부분에서 질문입니다. 7분 31초 부분에서 질문있습니다.
안녕하세요. const p = add(1,2);console.log(p); 여기서 Promise { <pending> } 이 출력되는데요.add 함수 내부에서 await setTimeout 호출되면 add 함수는 더 진행되지 않는다고 하셨습니다. 그럼 return 도 못한건데 왜 p 에 값이 Promise 가 들어왔는지 궁금합니다..
-
해결됨홍정모의 따라하며 배우는 C++
비동기 프로그래밍 관련 질문입니다.
int main() { // future and promsise { std::promise<int> prom; auto future = prom.get_future(); auto t = std::thread([](std::promise<int>&& prom) { prom.set_value(1 + 2); }, std::move(prom)); cout << future.get() << endl; t.join(); } }이건 수업중 코드입니다.살짝 햇갈려서 구글링으로 이것저것 검색해보던중https://modoocode.com/284이 사이트의 설명을 읽다가 몇가지 질문 남겨봅니다.링크에서 std::promise 와 std::future 부분입니다. 1.cout << future.get() << endl; 여기서 작업한 값들이 promise객체의 인스턴스에 저장되어 있고 이를 돌려받아야되는데 promise객체의 인스턴스에 대한 언급없이 딸랑 get()만 쓰면 promise객체의 인스턴스로부터 돌려받는다는것을 어떻게 알 수 있나요? std::future<string> data = p.get_future();이 부분에서 약속을 했으니 그냥 get함수하면 알아서 promise객체로부터 값을 받아오고 출력까지 하는건가요? 그냥 이렇게 이해하면 되는건가요? 2.1번질문의 연장선입니다.get을 한번 더 쓰면 오류가 나는 이유가 저 링크에 의하면future 에서 get 을 호출하면, 설정된 객체가 이동 하기 때문에 절대로 get 을 두 번 호출하면 안됩니다. 라던데 이게 무슨말인가요?get함수는 그냥 값을 받아오는건데 객체가 이동한다는건 뭔가요?? 3.연산수행후 돌려줄 내부 객체 타입을 정하고연산이 끝나면 future 객체에 값을 전달함. 값을 전달할 future객체는 get_future함수를 통해 설정함.여기까진 이해가 되었는데 그럼 get함수는 (1). 전달받은 값을 출력하는 함수다.get함수 호출전에 자동으로 값은 promise객체에서 future객체로 넘어간다.(2).promise객체로부터 future객체가 값을 전달받는 행위 자체를 하는 future객체의 함수다.get함수 호출전엔 값이 안넘어간다. (1),(2) 둘 중 어느것에 해당되나요?이걸 제가 왜 햇갈려서 질문드리냐면 링크를 밑으로 살짝 내려보시면 p->set_value("some data");위와 같이 promise 객체가 자신의 future 객체에 데이터를 제공한 후에; 이부분이 이해하기 애매해서 질문드립니다.저부분은 객체에 데이터를 제공하는게 아니라 그냥 promise 객체의 인스턴스에 값을 입력하는 과정이지 않습니까? 질문이 좀 난잡한점 양해부탁드립니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
Promise과 콜백함수에 관한 질문입니다.
Promise나 Async 경우, Promise 객체를 return 하는데, 콜백함수로만 디자인하면, promise 객체를 return 하지 않네요... 그래서, 몇 가지 궁금증이 발생했는데요. Q1. Promise가 아니라 콜백을 쓰는 게 더 좋거나, 반드시 콜백 함수로만 디자인해야하는 경우가 있나요?? Q2. 코딩을 하다보면, 반드시 Promise 객체만 요구하는 경우가 있나요?? 다시 말해서, 단순히 콜백 지옥 때문이 아니라, 콜백 함수만으로 비동기를 디자인 할 수없는 경우가 있는지 궁금합니다.
-
미해결실습 UI 개발로 배워보는 순수 javascript 와 VueJS 개발
return new Promise 와 return Promise.resolve
안녕하세요 강의 정말 잘 듣고 있습니다! 코드를 보다보니 궁금한 점이 있는데요, HistoryModel.js 에서의 list 함수는 Promise.resolve 를 통해 Fulfilled 된 프로미스 객체를 반환하고 있습니다. 그런데 KeywordModel.js 에서의 list 함수는 new Promise 를 통해 프로미스 객체를 반환해주고 계신데 두 방법의 차이는 뭘까요?? 또한 Promise.resolve에서는 바로 data를 반환하고 있지만, KeywordModel.js 의 Promise data는 0.2초 뒤에 반환하도록 한 이유가 있을까요?
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
then(()=> next()) 와 then(next())
route에서 .then(() => next()) 이렇게 적게 되면 화면이 이동할 때 깜박이는 현상이 있습니다. git 코드를 받아보니 .then(next()) 라고 변경되어 있는걸 확인했습니다. 실제 강의에서는 then( () => next() ) 이렇게 진행을 하셨는데, 이렇게 할 경우 list 라는 변수를 공유하고 있기 때문에 데이터를 갱신 한 뒤에, next가 호출이 되서 이전 화면에서 데이터가 바뀐 데이터로 변경된 뒤에 transition 효과로 사라지기 때문에, 같은 데이터가 사라지고 (새로운 화면으로 이동하고) 다시 생겨서 마치 깜박이는 것처럼 보이게 되는데 그래서 .then(next())로 변경하신 걸까요 ? 이 경우는 프로미스 실행 전에 수행이 되니까 실제로는 store에서 dispath 하기 전에 next를 불러준 것과 같은 효과 맞을까요 ? 답변 부탁드립니다. 미리 감사 드립니다