2017-04-16 2 views
1

SignalR 허브 함수 시퀀스가 ​​비동기 적으로 실행되지 않는 문제가 발생했습니다.Typescript 비동기/SignalR 함수를 기다리는 중

는 내가 가진 :

> 0 
> 2 
> Uncaught (in promise) Error: SignalR: Connection must be started before data can be sent. Call .start() before .send() 
> at hubConnection.fn.init.send (jquery.signalR-2.2.1.js:780) 
> at init.invoke (jquery.signalR-2.2.1.js:2734) 
> at Object.userOnline (hubs:120) 
> at HubUserOnline (WaitingRoom.ts:190) 
> at WaitingRoom.ts:203 
> at Generator.next (<anonymous>) 
> at fulfilled (WaitingRoom.ts:1) 
> 1 

따라서 두 번째 허브 기능은 허브 인스턴스가 생성되기 전에 실행되는 거라고 나타내며, 그것은있어 :

//Hub functions 
//Initializing hub server and clients. 
function HubStart() { 
    $.connection.hub.start().then(function() { 
     console.log(1); 
     return new Promise(resolve => resolve); 
    }); 
} 
//Hub server-side function that add user's name to chat board. 
function HubUserOnline(user: any) { 
    $.connection.boardHub.server.userOnline(user).then(resolve => { return new Promise(resolve => resolve); }); 
} 

//Main 
var viewModel = ko.mapping.fromJS(model, mappingOption); 
main(); 

//Definition of the main function 
async function main() { 
    console.log(0); 
    await HubStart(); 
    console.log(2); 
    await HubUserOnline(ko.mapping.toJS(viewModel.CurrentUser)) 
    console.log(3); 
    } 
}); 

그러나, 콘솔은 말한다 오류.

허브 함수는 JQueryPromise를 반환하므로 허브 함수가 완료되면 함수에서 약속을 반환하도록했습니다. 아무도 내 코드와 재판에서 잘못을 나타낼 수 있습니까?

+0

약속은 일반 개체입니다. 함수를 사용하려면 함수에서 반환해야합니다. 그렇지 않으면 함수가'undefined'를 반환합니다. –

답변

1

나는이 문제가 HubStartHubUserOnline이 약속을 되 돌리지 않고 대신에 당신이 반감 논란에 빠졌다고 믿는다.

는 다음과 같은 시도 :

//Hub functions 
//Initializing hub server and clients. 
function HubStart() { 
    return new Promise((resolve, reject) => { 
    $.connection.hub.start().then(() => { 
     console.log(1); 
     resolve(); 
    }); 
    }); 
} 
//Hub server-side function that add user's name to chat board. 
function HubUserOnline(user: any) { 
    return new Promise((resolve, reject) => { 
    $.connection.boardHub.server.userOnline(user).then(() => { 
     resolve(); 
    }); 
    }); 
} 

//Main 
var viewModel = ko.mapping.fromJS(model, mappingOption); 
main(); 

//Definition of the main function 
async function main() { 
    console.log(0); 
    await HubStart(); 
    console.log(2); 
    await HubUserOnline(ko.mapping.toJS(viewModel.CurrentUser)) 
    console.log(3); 
} 
}); 
+0

제대로 작동했습니다. 감사합니다. 나는 약속의 처리에있어서 반 패턴에 대해 더 연구 할 것이다. –

+0

언제든지! 그것은 현명 할 것이다 :). – Ricky

관련 문제