js如何返回内层Promise?

时间:2018-06-04 14:43:45

标签: javascript promise es6-promise

我有以下嵌套的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 :(得分:1)

 .then( this._sendRequest("..."))

这没有任何意义,因为您传递了您的请求实用程序作为回调函数返回到then处理程序的承诺,并且调用promise不起作用。 Imstead你应该传递一个返回Promise的处理函数,所以外部的promise链将被展平,你得到你想要的东西:

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

哦,结束括号(})处于错误的位置。