programing

성공적인 약속 해결에서 외부 변수에 값 할당

javamemo 2023. 3. 31. 21:21
반응형

성공적인 약속 해결에서 외부 변수에 값 할당

난 꽤 바보 같은 문제가 있어.다음 사항을 고려하십시오.

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

반응형