我仍然在学习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");
}
在这种情况下,我可以看到“之前”和“之后”。但“内”是不是在控制台中。
该代码调用Body.text()
虽然不使用async/await
。 Body.text()
返回Promise
。
html
内renderHTMLTemplate
是Promise
对象,而不是纯文本。
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 })
}
处理throw
n错误
FetcherClass.postModalRequest()
.then(html =>
console.log(html);
this.renderHTMLTemplate(html)
)
.catch(e => console.error(e))
有什么会发生一个视图中,添加上的错误情况的处理程序:
FetcherClass.postModalRequest().then(
html => this.renderHTMLTemplate(html.text()),
// the second handler is called if promise "fails" (is rejected)
function() { console.log(arguments); }
)