【问题标题】:Aurelia typescript load json serviceAurelia typescript 加载 json 服务
【发布时间】:2016-07-19 15:54:40
【问题描述】:

我正在尝试创建一个具有两个功能的类: 1) 从存储在我的本地服务器中的 json 加载项目并返回该变量以及所有项目。 2) 按 id 返回单个项目。 问题是我想从不同的模块中使用这两种方法,我不知道如何去实现模块和使用它。到目前为止,我已经能够用aurelia的fetch客户端实现http部分了,但是我不知道如何实现这个功能:

function getItems() {
   // some http request code
   return fetchedItems;
}

因为 aurelia.io 中的代码做了这样的事情(我已经尝试过,如果我打印数据,它实际上可以工作):

import 'fetch';
import {HttpClient} from "aurelia-fetch-client";

export function getItems(url) {
    let client = new HttpClient();
    client.configure(config => {
      config
        .withBaseUrl('api/')
        .withDefaults({
          credentials: 'same-origin',
          headers: {
            'Accept': 'application/json',
            'X-Requested-With': 'Fetch'
          }
        })
        .withInterceptor({
          request(request) {
            console.log(`Requesting ${request.method} ${request.url}`);
            return request;
          },
          response(response) {
            console.log(`Received ${response.status} ${response.url}`);
            return response;
          }
        });
    });

    client.fetch(url)
      .then(response => response.json())
      .then(data => {
        console.log(data);
      });
  }

这一切正常。关键是不要做'console.log(data);'我想返回它,但到目前为止似乎唯一可行的是将返回的项目分配给具有“this.items = data”的本地类变量。只要我有一个允许这样做的功能,我就可以接受:

let items = getItems();

let item = getItemById(id);

编辑:已解决

用户应该注意,为了让它工作,他们应该在他们的 tsconfig.js 中有这个:

"target": "es6"

因为 async/await 至少需要 ES2015。

【问题讨论】:

    标签: json aurelia aurelia-fetch-client


    【解决方案1】:

    使用async / await

    如果您使用 TypeScript 并以 ES6 为目标,则可以使用 await/async 关键字。

    export async function getItems(url) {
        let client = new HttpClient();
        client.configure(config => {
          config
            .withBaseUrl('api/')
            .withDefaults({
              credentials: 'same-origin',
              headers: {
                'Accept': 'application/json',
                'X-Requested-With': 'Fetch'
              }
            })
            .withInterceptor({
              request(request) {
                console.log(`Requesting ${request.method} ${request.url}`);
                return request;
              },
              response(response) {
                console.log(`Received ${response.status} ${response.url}`);
                return response;
              }
            });
        });
    
        return await client.fetch(url)
          .then(response => response.json());
    
    }
    

    【讨论】:

      【解决方案2】:

      client.fetch 返回一个承诺,所以你只需要返回它:

      return client.fetch(url)
         .then(response => response.json());
      

      使用功能:

      getItems(url)
        .then(data => this.someProperty = data);
      

      【讨论】:

        猜你喜欢
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 2018-06-28
        • 1970-01-01
        相关资源
        最近更新 更多