我遇到了一個問題,即無法異步執行SignalR集線器功能序列。使用SignalR功能的打字機異步/等待
我:
//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);
}
});
但是,控制檯說:
> 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
因此表示第二樞紐功能正想已經建立樞紐實例之前被執行,並且它有一個錯誤。
集線器函數返回JQueryPromise,所以我試圖讓一個函數在集線器函數完成時返回一個承諾。任何人都可以在我的代碼和試用中指出錯誤嗎?
承諾是有規則物體。如果你想使用它們,你需要從函數中返回它們,否則你的函數只返回'undefined'。 –