异步/等待->是否可能没有返回值?

时间:2018-08-28 08:58:13

标签: javascript asynchronous promise

因此,我有一个函数可以执行一些异步工作。

该函数当前看起来像这样(setTimeout之所以实现,是因为我没有设法正确实现async / await的方式):

function gatherAllRelevantReservationData(TimeFrameStartFromInputfield, TimeFrameEndFromInputfield, liebraum, liebsitz, reservationFromDatabaseTimeFramesStart, reservationFromDatabaseTimeFramesEnd){

    console.log("reservationFromDatabaseTimeFramesStart inside gatherAllRelevantReservationData are ", reservationFromDatabaseTimeFramesStart, reservationFromDatabaseTimeFramesEnd)
    //console.log("TimeFrameStartFromInputfield and TimeFrameEndFromInputfield inside gatherAllRelevantReservationData are ", TimeFrameStartFromInputfield, TimeFrameEndFromInputfield)
    var timeFrameAsObject = convertDateStringToJavaScriptDateTimeObject(TimeFrameStartFromInputfield, TimeFrameEndFromInputfield)
    var startDateAsObject = timeFrameAsObject.start
    var endDateAsObject =  timeFrameAsObject.end
    var timeFrameAsUnixTimeStamp = ConvertToCustomizedUnixTimestampString(startDateAsObject, endDateAsObject)
    var startDateAsUnixTimeStamp  = timeFrameAsUnixTimeStamp.start;
    var endDateAsUnixTimeStamp = timeFrameAsUnixTimeStamp.end;
    getTable(startDateAsUnixTimeStamp, endDateAsUnixTimeStamp, liebraum);

    if(FavSeatcheckHasBeenEnabled == 1){
    setTimeout(function(){
       prepareSelectedAndDatabaseDateStringsForComparison(startDateAsObject, endDateAsObject, liebraum, liebsitz, reservationFromDatabaseTimeFramesStart, reservationFromDatabaseTimeFramesEnd);
    }, 300)
  }
};

getTable函数需要一些时间,并且需要先完成才能调用prepareSelectedAndDatabaseDateStringsForComparison。问题是getTable没有任何返回值。

我对ES7 async / await功能以及ES6 Prom还是陌生的。 我知道,await通常期望可以兑现一些诺言,而且我可能会以一种非常卑鄙,令人讨厌的方式安排它。

但是我想知道是否还有其他优雅的方法。

理想情况下,我只想将async附加到gatherAllRelevantReservationData上,然后在getTable呼叫前加一个“ await”,但这当然行不通。

有什么办法可以解决这个问题吗?

编辑:这是“ getTable”函数:

function getTable(start, ende, liebraum)
{
//console.log("start in getTable is " + start)
//console.log("ende in getTable is " + ende)
  fillRooms(liebraum);
  $.post("../include/returnTable.php", {
    anfang: start,
    ende: ende,
    art: art
  }, function(data){
    document.getElementById("tablediv").innerHTML= data;
    console.log("start inside callback of AJAX inside getTabel is ", start)
    //console.log("data after getTable function " + data);
	//fillRooms(liebraum);
  })

}

1 个答案:

答案 0 :(得分:2)

如果您想使用async / await,则需要更改getTable来返回Promise(或某些可行的),因为只有它们可以是{{ 1}}。

修复您的await以返回getTable调用,以便随后可以在$.post函数中检测其成功,然后您可以简单地gatherAllRelevantReservationData调用{ {1}}:

await