Aurelia typescript加载json服务

Aurelia typescript加载json服务,json,aurelia,aurelia-fetch-client,Json,Aurelia,Aurelia Fetch Client,我正在尝试创建一个具有两个函数的类: 1) 从存储在本地服务器中的json加载项,并将该变量与所有项一起返回。 2) 按id返回单个项目。 问题是我想从不同的模块中使用这两种方法,我不知道如何实现和使用该模块。到目前为止,我已经能够使用aurelia的fetch客户端实现http部分,但我不知道如何实现该功能: function getItems() { // some http request code return fetchedItems; } getItems(url)

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

function getItems() {
   // some http request code
   return fetchedItems;
}
getItems(url)
  .then(data => this.someProperty = data);
因为aurelia.io中的代码是这样做的(我已经尝试过了,如果我打印数据的话,它实际上可以工作):

所有这些都可以。关键是,不要执行“console.log(data);”我想返回它,但到目前为止,唯一有效的方法是将返回的项分配给一个带有“this.items=data”的局部类变量。只要我有一个函数允许这样做,我就可以这样做:

let items = getItems();

编辑:已解决

用户应该注意,为了使其正常工作,他们应该在tsconfig.js中包含以下内容:

"target": "es6"

因为async/await至少需要ES2015。

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

return client.fetch(url)
   .then(response => response.json());
要使用该功能,请执行以下操作:

function getItems() {
   // some http request code
   return fetchedItems;
}
getItems(url)
  .then(data => this.someProperty = data);

client.fetch
返回一个承诺,因此您只需返回它:

return client.fetch(url)
   .then(response => response.json());
要使用该功能,请执行以下操作:

function getItems() {
   // some http request code
   return fetchedItems;
}
getItems(url)
  .then(data => this.someProperty = data);
使用
异步
/
等待
如果您使用的是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());

}
使用
异步
/
等待
如果您使用的是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());

}