programing

여러 개의 . then()은 단일 angularjs 약속에 있습니다.모두 _original_데이터를 사용합니다.

powerit 2023. 3. 4. 15:13
반응형

여러 개의 . then()은 단일 angularjs 약속에 있습니다.모두 _original_데이터를 사용합니다.

약속을 믿고 angularjs 앱을 만들고 있는데, 잘 되고 있지만 좀 더 최적으로 할 수 있을까?

코드의 선두에, 몇개의 데이터를 취득하기 위한 약속을 작성합니다.이 작업이 완료되면 모두 이 데이터를 사용하는 몇 가지 기능을 실행하고 싶습니다.앱의 관련 없는 부분에 기능이 첨부되어 있기 때문에 약속에 첨부되어 있는 순서를 알 수 없습니다.그것들은 순차적으로 행해질 필요도 없다.

app.service("Fetch", function ($q){
    return function() {
        var def = $q.defer();
        somelibrary.asynccall(function(error, data){ //callback
            if (error) def.reject(error);
            else def.resolve(data);
        });
        return def.promise;
    };
});

app.controller("ctrl", function ($scope, Fetch) {
    var prom = Fetch();

    //somewhere:
    prom.then(function(data){$scope.var1 = data["VAR1"];});
    //somewhere else:
    prom.then(function(data){$scope.var2 = data["VAR2"]});
});

여기서 가장 큰 단점은 후기가then는 앞의 것이 종료될 때만 실행됩니다.여기서는 필요 없습니다.

또, 추가가 필요합니다.return data내면에function(data){...}, 그 이외의 경우는 다음과 같습니다.then()를 가지고 있지 않다.data이용할 수 있는.

이 상황에 더 적합한 다른 방법은 없을까?


편집: @jfriend00에서 언급했듯이, 제가 잘못 알고 있었습니다.실제로 두 함수는 약속이 정상적으로 해결되면 동시에 동시에 실행되어 체인이 되어 있지 않기 때문에 서로 의존하지 않습니다.도와주셔서 고마워요.

문제를 해결할 수 있을 것 같기 때문에 제 코멘트를 답변으로 바꿉니다.

당신의 패턴으로 두 사람은.then()같은 약속에 대한 콜은 약속이 해결되면 차례로 호출됩니다.두 번째.then()첫 번째 약속과는 무관하고 첫 번째 약속과는 무관하다.then().

이것들은 체인되어 있지 않기 때문에 두 번째는.then()처음에서 반환된 것에 의존하지 않는다.then()둘 다 같은 데이터가 전달됩니다.이들은 같은 약속의 여러 감시자일 뿐입니다. 마치 두 명의 이벤트 핸들러가 같은 이벤트를 듣는 것과 같습니다.

두 사람.then()동일한 약속에 대한 핸들러는 약속에 첨부된 순서대로 호출되며 동일한 데이터가 전달됩니다.

다음의 2개의 답변을 참조해 주세요.

그럼 약속과 약속의 차이점이 있나요?그럼 약속해그리고나서

javascript 약속 이해, 스택 및 체인

체인에 대한 자세한 내용은 p.then(...).then(...)브런칭과 브런칭의 비교 p.then(...); p.then(...)약속하고.

병렬 실행이 필요합니다: $q.all()

$q.all(
    function1,
    function2,
    function3
).then(function(responses) {
    console.log(responses);
});

언급URL : https://stackoverflow.com/questions/25345520/multiple-thens-on-single-angularjs-promise-all-use-original-data

반응형