如何从此AJAX调用返回结果?

时间:2018-08-29 12:15:06

标签: javascript asynchronous

我有以下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()在$ .post AJAX调用设置后返回loggedUser的值。 同时,我希望使用异步/等待功能来调用DetermineLoggedUser()的函数等待。 所以看起来像这样:

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调用创建的promise才能使“ await”起作用,所以我想知道如何同时返回{{1}内设置为loggedUser的值}?

2 个答案:

答案 0 :(得分:1)

您的第一句话很正确-从DetermineLoggedUser()函数返回Promise是正确的。然后,调用代码可以将.then()附加到该Promise对象(而不是将其附加到DefineLoggedUser函数中,此操作不是那么有用),您可以在其中检索值,然后执行所需的其他任何函数取决于它。

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();

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

答案 1 :(得分:0)

每个诺言,需要返回某些内容,如果您遇到这种情况,则您将文件determineLoggedUser.php叫给他,他直接进入您的then函数,期望什么都不返回。

尝试类似的方法:

const ajax = $.post('determineLoggedUser.php',{
  }).then(result => {
    return res.json(); // In case of backend return json... 
  }).then(data => {
    return console.log(data);
  });
  
console.log(ajax)