在require js中使用fetch

using fetch with-in require js

本文关键字:fetch require js      更新时间:2023-09-26

我正在尝试学习requirejs,并且正在扩展从这里找到的多页演示:https://github.com/requirejs/example-multipage with fetch.

从上面的git repo中的演示代码中,我修改了www/js/app/model/m1.js代码,看起来像这样。演示中的其他内容基本相同。

define(['./Base','fetch'], function (Base) {
    var m1 = fetch('data/people.json')
    .then(function(response) {
        return response.json();
    });
    return new Base(m1);
});

(我有fetch polyfil加载作为shim,这就是为什么它被包含在定义参数中-但开发最新的chrome支持fetch)

理想情况下,这将返回一个新的Base对象,该对象使用从fetch中解析的json来填充其数据源。这一点。当创建新的Base对象时,data = data

目前,虽然,似乎我只得到承诺回来,不能得到json。虽然如果我console.log的承诺,我可以看到成功的响应在那里。

我认为问题是你如何分配给m1。不能使用fetch的返回值。你的代码执行顺序如下:开始抓取,创建并返回Base,从抓取中接收数据。所以当你构建Base时,你还没有数据。这是JS中常见的模式(也是陷阱)。你能使用回调或承诺吗?

define(['./Base','fetch'], function (Base, callback) {
    fetch('data/people.json')
    .then(function(response) {
        callback(response.json());
        // or maybe you want 
        //Base(response.json());
    });
});