首页 > 解决方案 > NodeJS async/await 不等待先前的请求响应

问题描述

function getData(input) {
    return new Promise((resolve, reject) => {
        $.post({
            url: baseurl,
            data: input
        }).done(function (result) {
            resolve({ code: 200, data: result });
        }).fail(function (result) {
            resolve({ code: 400, data: result });
        });
    });
}

在按键时,我使用输入搜索参数调用了以下函数,但问题是在第一个请求/响应到来之前获得第二个请求/响应。

$("#searchText").on("keyup", async function () {
       let search = $.trim($(this).val());
       let result = await getData({ search: search });
});

标签: jquerynode.jsexpress

解决方案


这是解决此问题的方法

let latestSearch = "";

function getData(input) {
    return new Promise((resolve, reject) => {
        $.post({
            url: baseurl,
            data: input
        }).done(function (result) {
            resolve({ code: 200, data: result, search: input.search });
        }).fail(function (result) {
            resolve({ code: 400, data: result, search: input.search });
        });
    });
}

$("#searchText").on("keyup", function() {
       let search = $.trim($(this).val());
       latestSearch = search;
       let result = await getData({ search: search });
       if (result.search === latestSearch) {
        // do something with the data...
       }

});

推荐阅读