JS - 功能不取,然后承诺情况称为如果取一个帖子

问题描述 投票:0回答:2

我仍然在学习ES6。我有两个班。

FetcherClass:

static getModalRequest() {
    return fetch(FetcherClass.getNewLink, {
        method: 'GET'
    });

}

static postModalRequest() {
    return fetch(FetcherClass.getPostLink, {
        method: 'POST',
        body: FetcherClass.getFormData('rating-request-form')
    });

}

所述第一函数是一个Get方法和第二个是一个POST方法来从服务器端获取数据。

这是模态类的一部分:

addMainTemplate() {
    FetcherClass.getModalRequest().then(html => {
           // This is fired here always.
        this.renderHTMLTemplate(html.text());
    });
   }

sendRequest() {
        FetcherClass.postModalRequest().then(html =>
            // This function is never fired in the postModalRequest
            this.renderHTMLTemplate(html.text())
        );
   }

当我打电话addMainTemmplate功能总是火renderHTMLTemplate功能!所以,当抓取承诺是它的工作原理GET。

但是,如果取的承诺是一个POST,那么它不工作。该SendREquest功能 - 在“然后”的情况下 - 不闪光的renderHTMLTemplate

但我不知道真正的原因也许是因为GET和POST HTTP方法,?

是的,我得到的结果在这两种情况下的服务器,因为在Firefox的开发模式我看到响应状态等于200,我看到的HTML模板(它们是不一样的HTML,这样我就可以看到)。在Firefox的控制台选项卡中我没有看到任何错误!

更新:

sendRequest() {
        FetcherClass.postModalRequest().then(html =>

            console.log("before"); 
            // there is a console.log("inside"); but it never called.
            this.renderHTMLTemplate(html.text())
            console.log("after");
        );
   }
renderHTMLTemplate(html) {
    console.log("inside");
}

在这种情况下,我可以看到“之前”和“之后”。但“内”是不是在控制台中。

javascript es6-promise
2个回答
1
投票

该代码调用Body.text()虽然不使用async/awaitBody.text()返回Promise

htmlrenderHTMLTemplatePromise对象,而不是纯文本。

static getModalRequest() {
    return fetch(FetcherClass.getNewLink, {
        method: 'GET'
    })
    .then(response => response.text())
    .catch(e => { throw e })    
}

static postModalRequest() {
    return fetch(FetcherClass.getPostLink, {
        method: 'POST',
        body: FetcherClass.getFormData('rating-request-form')
    })
    .then(response => response.text())
    .catch(e => { throw e })
}

处理thrown错误

FetcherClass.postModalRequest()
.then(html =>
   console.log(html); 
   this.renderHTMLTemplate(html)
)
.catch(e => console.error(e))

0
投票

有什么会发生一个视图中,添加上的错误情况的处理程序:

FetcherClass.postModalRequest().then(
    html => this.renderHTMLTemplate(html.text()),
    // the second handler is called if promise "fails" (is rejected)
    function() { console.log(arguments); }
)
© www.soinside.com 2019 - 2024. All rights reserved.