JS, как вернуть внутренний слой Promise? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующий вложенный объект Promise.мне нужно вернуть res3 другой функции.Когда я использую следующий код, я получаю возврат как res1, но не res3.Что я должен сделать, чтобы получить res3?

Смысл меня в том, что мне нужно отправить данные на /pc_data/, и если после публикации мне нужно отправить на /server/register_keystroke/, то мне нужно получить res3 для следующих целей.

Спасибо!

registerKeystroke() {
        return this._sendRequest('/pc_data/', {'username': username, 'password': password})
        .then(res1 => {
            console.log('res1:' + res1);
            this._change_status(res.toString());
            return res1
        })
        .then(
            this._sendRequest('/server/register_keystroke/', this._getRequestData())
                .then(res3 => {
                    this._clearInputsTimestamps();
                    console.log('res3:' + res3);
                    return res3;
                })
        )}

_sendRequest(url, data) {
    return new Promise((resolve) => {
        $.post(
            url,
            JSON.stringify(data),
            (data) => resolve(data),
            'json'
        );
    })
}

1 Ответ

0 голосов
/ 04 июня 2018
 .then( this._sendRequest("..."))

Это не имеет смысла, когда вы передаете обещание, которое ваша утилита запроса возвращает в качестве обратного вызова тогда обработчику, и вызов обещания не работает.Вместо этого вам следует передать функцию-обработчик, которая возвращает Обещание, поэтому внешняя цепочка обещаний будет сглажена, и вы получите то, что хотите:

 .then(() => this._sendRequest("..."))
 .then(response => /*..*/)

О, а закрывающая скобка (}) невернаположение.

...