вызов ajax, возвращающий промис и разрешающий вызов вызывающей функцией до его значения - PullRequest
0 голосов
/ 18 мая 2018

К настоящему времени я прочитал где-то около 6 страниц, содержащих документацию и ответы на вопросы stackoverflow, но я не понимаю метод.

Моя функция к настоящему времени после прочтения всего материала, построенного следующим образом:

async function getFToken(postId){
    const response = await $.ajax({
        type: "POST",
        url: ajax_object.ajax_url,
        data:{
        action:'get_f_token', 
        postId: postId,
        },
        success:function(response) {

        }
    });
    return response;
}

а в другой моей функции это так:

function getFeedback(postId){
    $(".show_company").hide();
    $(".show_feedback").show();
    $.ajax({
        type: "POST",
        dataType: "text json",
        url: ajax_object.ajax_url,
        data:{
        action:'get_feedback', 
        postId: postId,
        },
        success:function(response) {
            var postTitle = '';
            for (i in response) {
                postTitle += "<h1>" + response[i].post_title + "</h1><br/><br/>" + response[i].ID ;
                var test = getFToken(387);
                alert(Promise.resolve(test));
            };
            $("#result").html(postTitle);
        }
    });
}

есть ли вероятность, что это более серьезная проблема, потому что я вызываю асинхронный вызов в другом вызове Ajax, пытающемся получить значение?Я пытаюсь получить строку из первого вызова ajax и передать ее второй функции в вызове ajax, чтобы прикрепить ее к сообщениям, полученным из WordPress

Предупреждение дает мне [обещание объекта], нокак получить значение, переданное из сценария php?

php-scrtipt:

//get fToken from specific feedbacks
add_action( 'wp_ajax_get_f_token', 'get_f_token' );
function get_f_token() {
    if(isset($_POST['postId'])){
        $postId = $_POST['postId'];
    } 
    $fToken = get_post_meta($postId, 'fToken', true);
    echo $fToken;
    wp_die();
}

1 Ответ

0 голосов
/ 18 мая 2018

Не используйте success обратные вызовы, когда вы можете использовать async / await:

async function getFToken(postId) {
    return $.ajax({
        type: "POST",
        url: ajax_object.ajax_url,
        data: {
            action: 'get_f_token', 
            postId: postId,
        }
    });
}

async function getFeedback(postId) {
    $(".show_company").hide();
    $(".show_feedback").show();
    const response = await $.ajax({
//                   ^^^^^
        type: "POST",
        dataType: "text json",
        url: ajax_object.ajax_url,
        data: {
            action: 'get_feedback', 
            postId: postId,
        }
    });
    let postTitle = '';
    for (const i in response) {
        postTitle += "<h1>" + response[i].post_title + "</h1><br/><br/>" + response[i].ID ;
        const test = await getFToken(387);
//                   ^^^^^
        alert(test); // no Promise.resolve, you don't want to alert a promise
    }
    $("#result").html(postTitle);
}
...