Javascript 有没有一种方法可以从fetchapi返回解析后的数据,而不是承诺?
我正在构建一个应用程序,使用fetch从API获取一些数据,并将其注入到网页中。该应用程序以模型-视图-控制器模式构建。我希望在模型中获取和解析数据,并在控制器中向网站注入数据。然而,fetch返回一个promise使这变得相当棘手,因为它似乎让我可以选择要么在控制器中进行解析,要么从模型中进行注入,这两者我都希望避免 有没有一种方法可以构造一个函数,使它在解析后从fetch返回数据,而不是承诺 我现在所拥有的:Javascript 有没有一种方法可以从fetchapi返回解析后的数据,而不是承诺?,javascript,promise,fetch,Javascript,Promise,Fetch,我正在构建一个应用程序,使用fetch从API获取一些数据,并将其注入到网页中。该应用程序以模型-视图-控制器模式构建。我希望在模型中获取和解析数据,并在控制器中向网站注入数据。然而,fetch返回一个promise使这变得相当棘手,因为它似乎让我可以选择要么在控制器中进行解析,要么从模型中进行注入,这两者我都希望避免 有没有一种方法可以构造一个函数,使它在解析后从fetch返回数据,而不是承诺 我现在所拥有的: function showMessages() { fetch('https:/
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);
}
半解
虽然有点粗俗,也许是一种反模式。您可以使用以下方法在页面上使用同步请求预加载该数据:
head
script(id='jsonData_1', type='application/json', src="/foo/bar/json")
// Other JS/Imports etc
或者使用文档。编写并加载JSON,如下所示:
head
script.
document.write('\x3Cscript type="application/json" src="/foo/bar/j.json">\x3C/script>');
注意:为便于阅读,HTML是用PUG/HAML编写的
在代码本身中,读取该数据的DOM,如:
const data = JSON.parse(document.getElementById('#jsonData_1').innerHTML)
最后的想法
再说一遍,请不要这样做。但是有一种方法;) 你无法回避这个问题的异步本质。您可以使用async/await
使它看起来更同步,但它只会使它看起来更同步。您还可以返回由fetch
生成的承诺,该承诺允许您在showMessages()
中处理内容。与“是否有办法立即打开亚马逊下周交付的软件包(并使用其内容)”相同?很有趣,感谢您的回答。我目前正在学习一门课程,他们建议我们使用fetch,但应用程序的要求包括使用MVC模式和维护单一责任原则。看来用fetch是不可能的。