2017-12-17 1 views
0

Azure Portal에서 Easy Table의 스크립트를 수정하고 있으며 수정 된 스크립트 내에서 클라이언트에 응답을 올바르게 반환하는 방법을 파악하는 데 문제가 있습니다. 지금이 모든 괜찮Azure의 비동기 Easy Table 스크립트

function getUserHeader(context) { 
    return context.req.headers['user-id']; 
} 


table.insert(function (context) { 
    context.item._user_id = getUserHeader(context); 
    return context.execute(); 
}); 

: 이것은 그냥 간단한 예로서 노드 패키지 azure-mobile-apps

을 사용하고, 이제 내가 그렇게처럼의 '삽입'기능을 수정 한 테이블을 가지고 가정 해 봅시다 테이블에있는 항목이 올바른 _user_id 및 모든 것으로 끝납니다.

하지만 어떤 이유에서든 getUserHeader을 비동기로 설정하고 약속을 반환해야합니다 (컨텍스트를 실행하기 전에 관련 테이블에서 토큰을 확인하거나 무언가를 확인하려고합니다). context.execute 실행 않으며, 기록은 올바른 _user_id으로 생성됩니까 :

function getUserHeader(context) { 
    return new Promise(function(resolve, reject){ 
     resolve(context.req.headers['user-id']); 
    }); 
} 


table.insert(function (context) { 
    getUserHeader(context) 
    .then(function(uid) { 
     context.item._user_id = uid; 
     return context.execute(); 
    })  
}); 

은 이제 한 단계에서 작동 다음은 위의 코드가 비동기 어떻게 보이는지입니다. 그러나 클라이언트가 만든 http 호출은 절대로 응답을 얻지 못합니다. 일반적으로 http 응답은 테이블 (삽입의 경우)에 추가 된 항목을 반환하지만 여기에는 표시되지 않습니다.

간편한 테이블 스크립트의 워크 플로에 비동기 기능을 추가하는 적절한 방법은 무엇입니까?

답변

1

Promise 기능을 호출 할 때 return 키워드가 누락되었습니다.

당신이 그것을 변경하는 경우이 작동 것이다 : 나는 내가 얻을 때 집하려고합니다

table.insert(function (context) { 
    return getUserHeader(context).then(function(uid) { 
     context.item._user_id = uid; 
     return context.execute(); 
    })  
}); 
+0

. 나는 그것을 시도하는 것을 생각했다, 나는 벌써 가지고있다라고 생각했다. 그러나 나는 다시 시험 할 것이다. – TKoL