source

약속에서 데이터를 반환하는 방법

factcode 2023. 3. 20. 23:36
반응형

약속에서 데이터를 반환하는 방법

나는 그 물건을 구해야 한다.response.data약속에서 벗어나서 동봉 함수로 반환할 수 있도록 합니다.알아요, 일반적인 JavaScript 범위 때문에 코딩 방식으로는 할 수 없을 것 같아요.할 수 있는 방법이 없을까요?

#1의 console.log는 올바른 데이터를 생성합니다.console.log #2는 항상 'a'를 생성합니다.

function addSiteParentId(nodeId) {   
    var theParentId = 'a';
    var parentId = relationsManagerResource.GetParentId(nodeId)
                        .then(function(response){                               
                            theParentId = response.data;
                            console.log(theParentId);  // #1
                        });
    console.log(theParentId);  // #2
    return theParentId;
}

어떤 조언이라도 주시면 감사하겠습니다.

약속의 기본 원칙 중 하나는 비동기식으로 처리된다는 것입니다.즉, 약속을 만들고 즉시 코드에서 그 결과를 동기화할 수 없습니다(예: 약속을 시작한 함수 내에서 약속 결과를 반환할 수 없습니다).

대신 당신이 하고 싶은 일은 약속 자체를 돌려주는 것이다.그러면 그 결과가 필요한 함수는 호출할 수 있습니다..then()그 약속에 따라, 그리고 그 약속들이 해결되면 결과는 거기에 있을 것이다.

다음은 약속의 라이프 사이클에 걸쳐 진행되는 HTML5Rocks의 리소스와 그 출력이 비동기적으로 해결되는 방법을 보여 줍니다.
https://web.dev/https/

또한 모든 컨트롤러와 서비스에서 몇 번이고 해결된 속성을 처리하는 기능을 사용하는 것을 좋아하지 않습니다.나 혼자가 아닌 것 같아:d

약속을 변수로 해서 결과를 얻으려고 하지 마세요. 물론 절대 안 됩니다.그러나 저는 아래의 솔루션을 찾아서 결과에 속성으로 액세스하기 위해 사용하였습니다.

먼저 서비스 속성에 결과를 기록합니다.

app.factory('your_factory',function(){
    var theParentIdResult = null;
    var factoryReturn = {  
        theParentId: theParentIdResult,
        addSiteParentId : addSiteParentId
    };
    return factoryReturn;
    function addSiteParentId(nodeId) {   
         var theParentId = 'a';
         var parentId = relationsManagerResource.GetParentId(nodeId)
             .then(function(response){                               
                 factoryReturn.theParentIdResult = response.data;
                 console.log(theParentId);  // #1
             });                    
    }        
})

이제, 우리는 그 방법을 확실히addSiteParentId자산에 액세스하기 전에 항상 해결됩니다.theParentId우리는 몇 가지 방법을 통해 이것을 달성할 수 있다.

  • 라우터 메서드에서 해결 사용:

    resolve: {
        parentId: function (your_factory) {
             your_factory.addSiteParentId();
        }
    }
    

컨트롤러 및 라우터에서 사용되는 기타 서비스에서는 your_factory.parentId에 연락하여 속성을 가져옵니다.상세한 것에 대하여는, http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx 를 참조해 주세요.

  • run서비스를 해결하기 위한 앱 메서드입니다.

    app.run(function (your_factory) { your_factory.addSiteParentId(); })
    
  • 컨트롤러의 첫 번째 컨트롤러 또는 서비스에 주입합니다.컨트롤러에서는 필요한 모든 초기화 서비스를 호출할 수 있습니다.메인 컨트롤러의 자녀는 원하는 대로 정상적으로 이 속성에 액세스할 수 있으므로 모든 컨트롤러가 유지됩니다.

선택한 방법은 컨텍스트에 따라 변수의 범위와 변수의 읽기 빈도에 따라 달라집니다.

변수 대신 약속을 반환해야 합니다.따라서 함수에서 다음과 같이 돌아갑니다.

return relationsManagerResource.GetParentId(nodeId)

그리고 나중에 돌려받은 약속을 해결하세요. 또 한 번 하면 될 것 같아요.theParentId지고있있 있있있다다

언급URL : https://stackoverflow.com/questions/37533929/how-to-return-data-from-promise

반응형