等待 invocation/method 到 return javascript 信号器中的值
Wait for invocation/method to return a value in javascript signalr
我不明白为什么我的代码不等待对 return 值的调用。
试着把它变成一个单独的函数,仍然是同样的错误。
看起来我无法访问 .done 函数。
主要代码
JS:
var connection = new signalR.HubConnectionBuilder().withUrl("/rouletteHub").build();
function HandleBet(event, color){
var amount = parseInt(document.getElementById("amount").value);
var actualPoints = 0;
connection.invoke("GetPtsFromServer").then(function (pts) {
actualPoints = parseInt(pts);
})
console.log(actualPoints);
if (isNaN(amount)){
ErrorNotANumber();
return;
}
if (amount < 0){
ErrorNegativeNumber();
return;
}
//console.log(amount);
//console.log(actualPoints)
if (amount > actualPoints){
NotEnoughPoints();
return;
}
if (amount > 0){
connection.invoke("PlaceBet", color.toString(), amount).then(function () {
PlacedBetSuccess(GetColor2(color), amount);
}, function (err) {
PlacedBetError();
})
}
event.preventDefault();
}
C#:
public int? GetPtsFromServer()
{
if (Context.User?.Identity != null && !Context.User.Identity.IsAuthenticated) return null;
if (Context.User == null) return null;
var dcId = Context.User.Claims.FirstOrDefault(c => c.Type == "urn:discord:id")?.Value;
return DataWrapper.HelpForTypes.GetPts(Convert.ToUInt64(dcId));
}
当使用 .done 而不是 .then 时会抛出错误
控制台:
Uncaught TypeError: connection.invoke(...).done is not a function
at HandleBet (Roulette:420)
at HTMLButtonElement.<anonymous> (Roulette:469)
JS:
connection.invoke("GetPtsFromServer").done(function (pts) {
actualPoints = parseInt(pts);
});
已通过使 HandleBet
异步并在 connection.invoke
之前插入 await
来修复。
我不明白为什么我的代码不等待对 return 值的调用。 试着把它变成一个单独的函数,仍然是同样的错误。 看起来我无法访问 .done 函数。
主要代码
JS:
var connection = new signalR.HubConnectionBuilder().withUrl("/rouletteHub").build();
function HandleBet(event, color){
var amount = parseInt(document.getElementById("amount").value);
var actualPoints = 0;
connection.invoke("GetPtsFromServer").then(function (pts) {
actualPoints = parseInt(pts);
})
console.log(actualPoints);
if (isNaN(amount)){
ErrorNotANumber();
return;
}
if (amount < 0){
ErrorNegativeNumber();
return;
}
//console.log(amount);
//console.log(actualPoints)
if (amount > actualPoints){
NotEnoughPoints();
return;
}
if (amount > 0){
connection.invoke("PlaceBet", color.toString(), amount).then(function () {
PlacedBetSuccess(GetColor2(color), amount);
}, function (err) {
PlacedBetError();
})
}
event.preventDefault();
}
C#:
public int? GetPtsFromServer()
{
if (Context.User?.Identity != null && !Context.User.Identity.IsAuthenticated) return null;
if (Context.User == null) return null;
var dcId = Context.User.Claims.FirstOrDefault(c => c.Type == "urn:discord:id")?.Value;
return DataWrapper.HelpForTypes.GetPts(Convert.ToUInt64(dcId));
}
当使用 .done 而不是 .then 时会抛出错误
控制台:
Uncaught TypeError: connection.invoke(...).done is not a function
at HandleBet (Roulette:420)
at HTMLButtonElement.<anonymous> (Roulette:469)
JS:
connection.invoke("GetPtsFromServer").done(function (pts) {
actualPoints = parseInt(pts);
});
已通过使 HandleBet
异步并在 connection.invoke
之前插入 await
来修复。