약속에서 돌아오다()
다음과 같은 Javascript 코드를 가지고 있습니다.
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
var test에는 항상 정의되지 않은 값이 있습니다.아직 약속이 안 풀려서 그런 것 같아요.약속에서 값을 돌려줄 방법이 있을까요?
에서 물건을 반환할 때then()
콜백, 좀 마술같아요값을 반환하면 다음 값은then()
이 값으로 호출됩니다.하지만 만약 당신이 약속 같은 것을 돌려준다면, 그 다음,then()
대기하고, 그 약속이 정착되었을 때만 호출됩니다(예약/예약).
출처: https://web.dev/promes/#queueing-asynchronous-actions
약속을 사용하려면 약속을 만드는 함수를 호출하거나 직접 만들어야 합니다.실제로 어떤 문제를 해결하려고 하는지 설명하지는 않지만, 다음과 같이 약속을 작성합니다.
function justTesting(input) {
return new Promise(function(resolve, reject) {
// some async operation here
setTimeout(function() {
// resolve the promise with some value
resolve(input + 10);
}, 500);
});
}
justTesting(29).then(function(val) {
// you access the value from the promise here
log(val);
});
// display output in snippet
function log(x) {
document.write(x);
}
또는 약속을 반환하는 함수가 이미 있는 경우 해당 함수를 사용하여 약속을 반환할 수 있습니다.
// function that returns a promise
function delay(t) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, t);
});
}
function justTesting(input) {
return delay(100).then(function() {
return input + 10;
});
}
justTesting(29).then(function(val) {
// you access the value from the promise here
log(val);
});
// display output in snippet
function log(x) {
document.write(x);
}
내가 여기서 한 일은 바로 그 약속에 대한 답신이다.테스트 기능그런 다음 함수가 해결되면 결과를 얻을 수 있습니다.
// new answer
function justTesting() {
return new Promise((resolve, reject) => {
if (true) {
return resolve("testing");
} else {
return reject("promise failed");
}
});
}
justTesting()
.then(res => {
let test = res;
// do something with the output :)
})
.catch(err => {
console.log(err);
});
이게 도움이 됐으면 좋겠네요!
// old answer
function justTesting() {
return promise.then(function(output) {
return output + 1;
});
}
justTesting().then((res) => {
var test = res;
// do something with the output :)
}
약속의 혼동을 없애기 위해 "wait" 명령과 비동기 기능을 사용하는 것을 선호합니다.
이 경우 먼저 비동기 함수를 작성합니다.이 함수는 "약속" 아래에 있는 어나니머스 함수 대신 사용됩니다.다음 질문의 일부:
async function SubFunction(output){
// Call to database , returns a promise, like an Ajax call etc :
const response = await axios.get( GetApiHost() + '/api/some_endpoint')
// Return :
return response;
}
그리고 이 함수를 메인 함수에서 호출합니다.
async function justTesting() {
const lv_result = await SubFunction(output);
return lv_result + 1;
}
여기서 메인 함수와 서브 함수를 모두 비동기 함수로 되돌린 것에 주목해 주세요.
Promises
값은 반환하지 않고 콜백(.then()과 함께 제공)으로 전달됩니다.
그건 아마 당신이 해야 할 일이라는 것을 말하려고 하는 것일 거예요.resolve(someObject);
약속 이행의 내부입니다.
그럼 네 안에then
참조할 수 있는 코드someObject
하고 싶은 걸 할 수 있어요
원래 포스터가 원하는 것은 다른 약속을 돌려주지 않고 약속에서 포장되지 않은 값을 돌려주는 것이라고 생각합니다.달리 증명되지 않는 한, 유감스럽지만 이건 다른 방법으로는 불가능할 수 없습니다then()
또는 비동기/비동기 컨텍스트.당신은 무슨 일이 있어도 항상 약속을 받아요.
배열이나 개체와 같은 참조 데이터 유형을 사용해야 합니다.
function foo(u,n){
let result = [];
const userBrands = new Promise((res, rej)=> {
res(['brand 1', 'brand 3']);
})
userBrands.then((ub)=>{
return new Promise((res, rej) =>{
res([...ub, 'brand 4', 'brand 5']);
})
}).then(response => {
return result.push(...response);
});
return result;
};
foo();
약속을 해결한 후에는 값을 반환할 수 없습니다.대신 약속이 해결되면 다른 함수를 호출합니다.
function justTesting() {
promise.then(function(output) {
// instead of return call another function
afterResolve(output + 1);
});
}
function afterResolve(result) {
// do something with result
}
var test = justTesting();
언급URL : https://stackoverflow.com/questions/34094806/return-from-a-promise-then
'source' 카테고리의 다른 글
워드프레스:관리 옵션 페이지에서 이미지 업로드 (0) | 2023.02.14 |
---|---|
JSON의 연속 스트림 처리 (0) | 2023.02.14 |
관리화면 서브메뉴 항목에 커스텀 HTML 클래스 이름을 추가하는 방법 (0) | 2023.02.14 |
HTML 웹 워커와 Jquery Ajax 호출 (0) | 2023.02.14 |
스프링 부트 어플리케이션이 'Hikari-Pool-1 - Starting...'에서 정지된다.." (0) | 2023.02.14 |