首页 > 解决方案 > 如何从这个 AJAX 调用返回结果?

问题描述

我有以下JScode

function DetermineLoggedUser(){

  return $.post('determineLoggedUser.php',{
  }).then((result) => {
    loggedUser = result;
  })

php 看起来像这样:

<?php
session_start()

if(ISSET($_SESSION["loggedUser"])) {
                        echo $_SESSION["loggedUser"];
                        }else{
                        echo "'userNotLogged'";
                        }

 ?>

现在,我想DetermineLoggedUser()返回loggedUser$.post AJAX 调用设置后的值。同时,我希望函数调用DetermineLoggedUser()等待,使用 async/await。所以它看起来有点像这样:

async function callingSeveralFunctions(){
//some functions
var result = await determineLoggedUser();
//some other functions which need to wait for determineLoggedUser()
}

    function DetermineLoggedUser(){

  return $.post('determineLoggedUser.php',{
  }).then((result) => {
    loggedUser = result;
  })

callingSeveralFunctions();

因此,由于我需要返回由 AJAX 调用创建的承诺以使“等待”工作,我想知道如何同时返回设置为loggedUserinside的值determineLoggedUser()

标签: javascriptasynchronous

解决方案


你的第一点是正确的——你从你的DetermineLoggedUser()函数中返回 Promise 是正确的。然后,调用代码可以将 a 附加.then()到该 Promise 对象(而不是将其附加在没有那么有用的DetermineLoggedUser 函数中),您可以在其中检索值,然后执行您需要的任何其他依赖于它的函数。

function callingSeveralFunctions(){
  //some functions
  var promise = determineLoggedUser();
  promise.then((response) => {
    loggedUser = response;
    //some other functions which need to wait for determineLoggedUser() - calls to these need to go inside the callback, here
  });
}

function DetermineLoggedUser(){
  return $.post('determineLoggedUser.php',{});
}

callingSeveralFunctions();

您无法逃避它是异步的事实,但您可以更好地使用它。


推荐阅读