清除 JS 响应

Clearing JS response

本文关键字:响应 JS 清除      更新时间:2023-09-26

我正在调用一个API。API 返回结果列表。当它这样做时 - 响应被馈送到一个对象中,然后我用它来迭代和显示它们。

这是执行此操作的函数:

    var getAvailability = () => {
        if (chosenData.hotel == "") {
            showError("Please select a location before booking.");
            $timeout(() => LTBNavService.setTab('location'), 50);
            return;
        }
        searchResponse = {};
        console.log(searchResponse);
        WebAPI.getHotelAvailability(genSearchObject()).then((data) => {
            searchResponse = data;
            $timeout(() => $('[data-tab-content] .search-btn').first().focus(), 50);
            generateRoomTypeObject(searchResponse);
        }, (data) => searchResponse.error = data.data.errors[0].error);
    };

问题:在新的结果集可用之前,仍会显示旧结果。这会导致闪烁和延迟,这是一种糟糕的用户体验。

解决方案:(我需要帮助)处理此问题的最佳方法是什么?理想情况下,我想重置/清除搜索响应。例如,交付新结果并清除旧结果。这可以从 getAvailability 函数中实现吗?

实现这一目标的最佳方法是什么?

解决方案:

感谢 @Daniel Beck建议调用 generateRoomTypeObject 函数并为其提供空对象 - +1 他的评论。

这在我的 generateRoomTypeObject 函数中触发了一个未定义的错误,我在其中运行了一些长度检查(有意义,因为对象是空的 - 所以没有什么可以做的长度检查)。

我通过处理未定义的异常并将 searchResponse 设置为空对象来处理错误。

  var generateRoomTypeObject = (searchResponse) => {
    var ratePlans = searchResponse.ratePlans,
        errors = searchResponse.error,
        roomTypes = [],
        ignoreBiggerRooms = false;
    rawRoomsObjs = [];
    if (angular.isUndefined(errors)) {
        // Iterate over the rate plan
        if(ratePlans === undefined){   
            //generateRoomTypeObject -- Handle undefined by creating new object
            searchResponse =  {}
        }else{
              for (var i = 0; i < ratePlans.length; i++) {
            var ratePlan = ratePlans[i],
                rooms = ratePlan.rooms;
            // Iterate over the rooms and add rooms to room object. Also keep a list of room types.
            for (var j = 0; j < rooms.length; j++) {
                //Stuff here
            }
        }
    }
}