약속에서 데이터를 반환하는 방법
나는 그 물건을 구해야 한다.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
'source' 카테고리의 다른 글
CORS를 사용하여 JavaScript Google Places API 요청을 구현하는 방법 (0) | 2023.03.20 |
---|---|
1and1 공유 호스트 WordPress 사이트에서 gzip을 작동시키는 방법 (0) | 2023.03.20 |
Woocommerce 3에서 제품 속성 가져오기 (0) | 2023.03.15 |
JSON 개체를 만들고 복제하는 방법 (0) | 2023.03.15 |
AngularJS: 동적으로 추가된 필드가 FormController에 등록되지 않았습니다. (0) | 2023.03.15 |