2016-10-28 2 views
0

이것은 내 첫 번째 게시물이므로 올바르게 처리하기를 바랍니다. 이것은 약속에 대한 나의 첫 번째 노출이고 나는 아직도 그것을 얻을 수 없다. 우리 프로젝트는 불행히도 비동기 대기를 지원하지 않습니다. 나는 sqlite보다 pouchdb를 사용하고있다.값을 반환하기 전에 typescript/javascript를 기다리는 방법

this.recipes는 레시피 페이지를 표시하는 데 사용됩니다. 그러나 처음에는 비어있는 상태로 돌아오고 각 레서피가 추가 된 후에는 항상 하나의 래서 피보다 뒤쳐집니다. 나는 모든 약속이 끝나기 전에 내가 이것을 돌려받는 것 때문에 이것이 확실하다고 확신한다. 나는 코드에서 내가 최종 수익을 약속 한 바깥에 매달아 놓았다는 것을 알았지 만 약속을 지킬 때 "RecipesPage.ts"에 "type void [type] void는 할당 할 수 없다"라는 오류가 발생합니다.

여러분이 제공 할 수있는 지원에 감사 드리며이를 위해 올바른 방법을 배우고 기쁘게 생각합니다. 미리 감사드립니다.

public getAllRecipes() { 
this.recipeBook = new Array<Recipe>(); 

this.recipeDatabase.allDocs 
({ 
    include_docs: true, 
}).then(docs => { 
    this.objectArray = docs.rows.map(row => { 
    return row.doc; 
    }) 
}).then(function(){ 
    for (let object of this.objectArray) { 
    this.myRecipe = this.convertObjectToRecipe(object); 
    this.recipeBook.push(this.myRecipe); 
    } 
}) 
return this.recipeBook; 
} 
+0

기다리지 마십시오. 자바 스크립트가 작동하지 않습니다. 아마도 [비동기 작업에서 값을 반환하는 방법] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)을 읽어야합니다. 대답은 당신이하지 않는다는 것입니다. 대신 비동기 응답을 프로그램하고 비동기 작업 완료에 대한 알림을받을 때만 다음 작업을 수행합니다. – jfriend00

답변

0

당신은하지 않습니다 :

this.recipes = this.database.getAllRecipes(); 

이 database.service.ts의 방법은 다음과 같습니다

이것은 RecipesPage.ts 내 호출입니다. 이와 같은 약속을 '풀어주는'실제적인 방법은 없습니다. 현실적으로 가장 가까운 것은 폴링입니다.

대신 약속을 반환하고 기다리는 곳에서 약속을 호출하십시오. 이것은 궁극적으로 비동기식이며 기다리고있는 것입니다. 로드 할 때 (그리고로드 될 때) 컨텐츠를 렌더링하는 방법을 선택하려면 UI에서 결정하십시오.

관련 문제