首页 文章

内容丰富的Javascript SDK和NativeScript

提问于
浏览
1

我正在努力让JavaScript Contentful SDK在我的Nativescript应用程序中运行 . 可悲的是,我是NativeScript的新手,所以可能会遗漏一些基本的东西 . 希望有人可以帮助:)

该模块以通常的方式安装在我的NativeScript项目中:

npm install contentful

然后我创建一个简单的模块(基于我在Github发现的一个例子https://github.com/contentful-labs/product-catalogue-web.ts):

import {ContentfulClientApi, createClient} from 'contentful';

export class ContentfulService {
      cdaClient: ContentfulClientApi;
      constructor() {

         this.cdaClient = createClient({
             space: 'spaceId',
             accessToken: 'token'
         });
      }
      getContent() {
          this.cdaClient.getContentTypes()
          .then(function(response) { 
            console.log(response.items);
            return response.items;
        })
      }
  }

在NativeSctipt视图模型中:

import { ContentfulService } from "../shared/cms";

let cms = new ContentfulService();
cms.getContent();

......但没有任何反应 . 没有错误或调试输出,但Native Script视图模型没有执行 . 如果我从构造函数中删除 createClient() 代码并且我只是在 getContent() 中放置了console.log,那么当我从视图模型中调用getContent()时,console.log按预期工作

如果我在NativeScript之外尝试这个,例如使用Contentful仪表板中的锅炉板节点项目,该项目按预期工作 .

我想使用SDK的原因是我需要通过同步来支持离线内容,而SDK似乎很容易实现(如果我能让它工作的话!) .

谢谢你的帮助

2 回答

  • 0

    我没有使用NativeScript的特定经验,但因为它只是在引擎盖下使用TypeScript / JavaScript:

    getContent 必须返回Contentful客户端返回的Promise:

    return this.cdaClient.getContentTypes()
    .then(...)
    

    这里可能发生的是,返回的Promise拒绝,但因为它没有在其他地方使用并且没有分配 catch 块,所以它被静默吞噬 .

    return this.cdaClient.getContentTypes()
    .then(...)
    .catch(function (error) {
      console.error(error)
    })
    
  • 0

    因此,似乎Contentful SDK与Native Script不兼容,所以现在我将交换使用React Native . 您可以在Contentful REST API中使用fetch,但我在使用了一些额外的SDK功能,例如离线缓存 .

相关问题