Я пытаюсь установить переменную в моем контроллере на возвращаемое значение функции. Эта функция создает новую запись в таблице и возвращает ее идентификатор. Когда я отлаживаю инструменты для Chrome, я вижу, что моя функция работает правильно и что response.data
фактически является номером. Однако, когда я пытаюсь установить переменную для этого вызова функции, значение устанавливается как неопределенное.Установить переменную javascript для возврата значения функции
Мой AngularJS компонент:
function saveNewGame($http, gameData) {
var newGameData = {
"InvestigatorGroupUserId": gameData.GroupUserId,
"InvestigatorGroupGameId": gameData.GroupGameId,
"WithTeacher": gameData.WithTeacher
};
$http.post("/APGame.WebHost/play/newGamePlayed", newGameData)
.then(function(response) {
return response.data;
});
}
function controller($http) {
var model = this;
var gameData = model.value;
var gamePlayedId;
model.startGame = function() {
gamePlayedId = saveNewGame($http, gameData);
alert(gamePlayedId);
};
}
module.component("gameApp",
{
templateUrl: "/APGame/GameAngular/game-app.html",
controllerAs: "game",
bindings: {
value: "<"
},
controller: ["$http", controller]
});
Это то, что делает мой вызов службы:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "newGamePlayed")]
int NewGamePlayed(GamePlayedData gamePlayedData);
public int NewGamePlayed(GamePlayedData gamePlayedData)
{
var gamePlayedRepo = _gamePlayedRepo ?? new GamePlayedRepository();
var newGame = new GamePlayed()
{
InvestigatorGroupUserId = gamePlayedData.InvestigatorGroupUserId,
InvestigatorGroupGameId = gamePlayedData.InvestigatorGroupGameId,
GameStartTime = DateTime.Now,
IsComplete = false
};
return gamePlayedRepo.Create(newGame);
}
Когда я делаю предупреждение на' gamePlayedId' внутри функции then, оно возвращает правильное значение. Но когда я делаю это за пределами, он показывает 'undefined' –
, потому что http.post является асинхронным, функция (ответ) вызывается, когда HTTP-запрос завершен. , когда вы выходите за пределы функции, запрос все еще не завершен, и значение еще не назначено. –