gpt4 book ai didi

javascript - Typescript Async/Await with SignalR 函数

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:57 25 4
gpt4 key购买 nike

我遇到了 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

因此它表明第二个集线器函数将在集线器实例创建之前执行,但出现错误。

hub 函数返回 JQueryPromise,因此我尝试让函数在 hub 函数完成时返回一个 promise。任何人都可以指出我的代码和试用版中的错误吗?

最佳答案

我认为问题在于 HubStartHubUserOnline 没有返回 promise ,而是您陷入了 promise 反模式。

尝试以下操作:

//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);
}
});

关于javascript - Typescript Async/Await with SignalR 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com