성공적인 약속 해결에서 외부 변수에 값 할당
난 꽤 바보 같은 문제가 있어.다음 사항을 고려하십시오.
vm.feed = getFeed().then(function(data) {return data;});
getFeed()
정상적으로 해결된 $q 지연 약속(각진 상태)을 반환합니다.
목표는 vm.feed를 콜백 성공 시 반환되는 데이터 값과 동일하게 설정하는 것입니다.현재와 같이 코드는 단순히 VM.feed를$promise
에 의해 반환된 오브젝트getFeed()
.
간단하게 할 수 있는 일이 있습니다.vm.feed = data
이 코드가 왜 그대로 작동하지 않는지 알고 싶습니다.
PD: 약속은 올바르게 해결되며 해결된 후에도 vm.feed는 데이터가 아니라 약속과 동일합니다.+10초 경과 후 vm.feed의 console.log를 복사합니다.
Promise {$$state: Object} $$state: Objectstatus:1 value: Object
Promise 오브젝트 내의 이 값 속성에는 vm.feed에 할당하는 약속의 실제 솔루션이 포함됩니다(예: i).data
).
감사해요!
이는 화살표 기능을 갖춘 ES6로 업데이트될 수 있으며 다음과 같습니다.
getFeed().then(data => (vm.feed = data));
를 사용하고 싶은 경우async function
, 다음과 같이 할 수도 있습니다.
async function myFunction(){
vm.feed = await getFeed();
// do whatever you need with vm.feed below
}
편집: 올바른 괄호를 추가했습니다(Max Waterman의 코멘트 참조).
넌 뭐든 얻을 수 있을 거야then()
돌아온다.그러나 이 글을 읽고 있기 때문에 다음 사항이 도움이 될 수 있습니다.
당신의 스테이트먼트는 인터프리터에게 반환된 값을 할당하도록 요구하는 것에 지나지 않습니다.then()
에게vm.feed
변수. then()
returns 、 Promise ( https://github.com/angular/angular.js/blob/ce77c25b067b7b74d90de23bfb4aac6a27abb9d1/src/ng/q.js#L288) )를 반환합니다.Promise(심플한 오브젝트)가 함수에서 꺼내져 할당되는 것을 보면, 이것을 상상할 수 있습니다.vm.feed
이것은 인터프리터가 그 행을 실행하자마자 발생합니다.
콜 시 콜백이 정상적으로 실행되지 않기 때문에then()
(나중에, 비동기적으로) 약속이 해결되었을 때만, 그것은 불가능할 것이다.then()
발신자의 값을 반환합니다.이것이 Javascript의 기본 동작 방식입니다.이것이 Promise가 도입된 정확한 이유이므로 인터프리터에게 콜백 형식으로 값을 푸시하도록 요청할 수 있습니다.
향후 JavaScript(ES2016)용으로 작업 중인 버전에서는 현재 예상한 대로 동작하는 몇 가지 키워드가 도입될 예정입니다.좋은 소식은 ES2016에서 현재 널리 지원되는 버전(ES5)으로 변환하여 지금 바로 이와 같은 코드 작성을 시작할 수 있다는 것입니다.
이 토픽의 상세한 소개는, https://www.youtube.com/watch?v=lil4YCCXRYc 에서 입수할 수 있습니다.
지금 바로 사용하려면 Babel: https://babeljs.io/docs/usage/experimental/을 통해 코드를 변환할 수 있습니다.--stage 1
를 참조해 주세요.
https://github.com/lukehoban/ecmascript-asyncawait에서도 몇 가지 예를 볼 수 있습니다.
then()
방법 【약속】여기에는 두 가지 인수가 필요합니다.는 Promise 를 직접 이 합니다.약속 개체 자체는 해결된 데이터를 직접 제공하지 않습니다. 이 개체의 인터페이스는 제공된 콜백을 통해서만 데이터를 제공합니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
getFeed().then(function(data) { vm.feed = data;});
then()
는 앞의 해결된 값을 합니다.then()
을 사용하다
promiseB = promiseA.then(function(result) {
return result + 1;
});
// promiseB will be resolved immediately after promiseA is resolved
// and its value will be the result of promiseA incremented by 1
개체와 해당 속성을 함수에 제공할 수 있습니다.다음으로 기능 내에서 필요한 작업을 수행합니다.마지막으로 약속에서 반환된 값을 개체의 올바른 위치에 할당합니다.다음은 예를 제시하겠습니다.
let myFunction = function (vm, feed) {
getFeed().then( data => {
vm[feed] = data
})
}
myFunction(vm, "feed")
필요에 따라서, 자기 호출 함수를 작성할 수도 있습니다.
비동기 기능에서 벗어나기 때문에 wait keywork를 사용할 수 없기 때문에 할 수 있는 '꼼수' 중 하나입니다.
set Timeout 내에서 vm.feed를 사용하여 원하는 작업을 수행합니다.
vm.feed = getFeed().then(function(data) {return data;});
setTimeout(() => {
// do you stuf here
// after the time you promise will be revolved or rejected
// if you need some of the values in here immediately out of settimeout
// might occur an error if promise wore not yet resolved or rejected
console.log("vm.feed",vm.feed);
}, 100);
언급URL : https://stackoverflow.com/questions/31264153/assign-value-from-successful-promise-resolve-to-external-variable
'programing' 카테고리의 다른 글
MongoDB 쉘에 20개 이상의 아이템(문서)을 인쇄하는 방법 (0) | 2023.03.31 |
---|---|
프록시로부터의 HTTP 302 응답을 angularjs 단위로 처리합니다. (0) | 2023.03.31 |
SpringBoot - jar 파일 만들기 - META-INF/spring.factories에 자동 구성 클래스가 없습니다. (0) | 2023.03.31 |
리액트 후크 방식으로 요청을 보내는 방법 (0) | 2023.03.31 |
사양에서 JSON 데이터를 설명하는 방법은 무엇입니까? (0) | 2023.03.31 |