因此,我有一个函数可以执行一些异步工作。
该函数当前看起来像这样(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);
})
}
答案 0 :(得分:2)
如果您想使用async
/ await
,则需要更改getTable
来返回Promise
(或某些可行的),因为只有它们可以是{{ 1}}。
修复您的await
以返回getTable
调用,以便随后可以在$.post
函数中检测其成功,然后您可以简单地gatherAllRelevantReservationData
调用{ {1}}:
await