programing

Angular의 q를 사용한 다중 체인 지연 함수JS 데이터 반환 중지

codeshow 2023. 3. 28. 22:24
반응형

Angular의 q를 사용한 다중 체인 지연 함수JS 데이터 반환 중지

다음 콜이 이전 deferred.resolve의 결과를 얻을 수 있도록 여러 개의 지연 함수 호출을 체인으로 연결하려고 합니다.이러한 콜을 2개 이상 체인으로 하면 데이터가 반환되지 않게 됩니다.

각도 컨트롤러 내부의 기본 코드는 다음과 같습니다.

    $scope.runAsync = function() {
        var asyncFn1 = function(data){
            var deferred = $q.defer();

            $timeout(function(){
                console.log("Async fn1 " + data);
                $scope.outputLines.push("Async fn1 " + data);
                deferred.resolve("Async fn1 " + data);
            },1000);

            return deferred.promise;
        }

        var asyncFn2 = function(data){
            var deferred = $q.defer();

            $timeout(function(){
                console.log("Async fn2 " + data);
                $scope.outputLines.push("Async fn2 " + data);
                deferred.resolve("Async fn2 " + data);
            },1000);

            return deferred.promise;
        }

        asyncFn1(1)
        .then(function(data){asyncFn2(data)})
        .then(function(data){asyncFn2(data)})
        .then(function(data){asyncFn2(data)});
    }

이것을 실행하면, 다음의 출력이 표시됩니다.

Async fn1 1
Async fn2 Async fn1 1
Async fn2 undefined
Async fn2 undefined

어떻게 하면 세 번째 콜이 두 번째 콜에서 결과를 얻고 네 번째 콜이 세 번째 콜에서 결과를 얻을 수 있을까요?

jsFiddle을 만들었습니다.http://jsfiddle.net/rhDyL/

$q에 대한 공식 문서 발췌:

(success Callback, error Callback) : 결과가 나오는 대로 성공 콜 또는 오류 콜 중 하나를 비동기적으로 언제 해결 또는 거부했는지를 불문합니다.콜백은 결과 또는 거부 이유를 단일 인수로 호출됩니다.

이 메서드는 success Callback 또는 error Callback 반환값을 통해 해결되거나 거부된 새로운 약속을 반환합니다.

또한 Domainic 슬라이드에 따르면 success Callack 또는 error Callback의 반환값에 대해 다음과 같이 설명합니다.

반환값이 약속일 경우 약속은 반환된 약속의 상태를 채택합니다.그렇지 않으면 성공 콜백이 반환값과 함께 즉시 호출됩니다.

정의에 따르면 코드에는 다음 항목이 없습니다.return키워드를 지정합니다.다음과 같습니다.

    asyncFn1(1)
    .then(function(data){return asyncFn2(data)})
    .then(function(data){return asyncFn2(data)})
    .then(function(data){return asyncFn2(data)});

언급URL : https://stackoverflow.com/questions/16071566/multiple-chained-deferred-functions-using-q-in-angularjs-stop-returning-data

반응형