【发布时间】:2018-08-02 06:01:16
【问题描述】:
我正在构建一个应用程序,它使用 fetch 从 API 获取一些数据并将其注入网页。该应用程序以模型-视图-控制器模式构建。我想在模型中获取和解析数据,并在控制器中注入网站。然而 fetch 返回一个 Promise 使这变得相当棘手,因为它似乎让我可以选择在控制器中进行解析或从模型中进行注入,这两者我都想避免。
有没有办法构造一个函数,以便它在解析后从 fetch 返回数据,而不是 promise?
我现在拥有的:
function showMessages() {
fetch('https://example-api.com/messages')
.then(function(response) {
response.json();
})
.then(function(messages) {
this.messageView.wrapInHTML(messages);
})
.then(function(wrappedMessages) {
document.getElementById('messages').innerHTML(wrappedMessages);
});
}
虽然我想要这样的东西:
// in messageModel.js
MessageModel.prototype.fetchMessages = function() {
fetch('https://example-api.com/messages')
.then(function(response) {
response.json();
})
// in messageController.js
function showMessages() {
messageData = this.messageModel.fetchMessages();
wrappedMessages = this.messageView.wrapInHTML(messages);
document.getElementById('messages').innerHTML(wrappedMessages);
}
【问题讨论】:
-
你无法绕过这个问题的异步特性。你可以使用
async/await让它看起来更同步,但它只会让它看起来那样。您还可以返回由fetch生成的承诺,这将允许您处理showMessages()中的内容。 -
同“有没有办法现在打开包裹(并使用它的内容),亚马逊下周发货?”
-
有趣,谢谢你的回答。我目前正在上课,他们建议我们使用 fetch 但应用程序的要求包括使用 MVC 模式和维护单一责任原则。似乎这对于 fetch 来说是不可能的。
标签: javascript promise fetch