首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何编写返回异步的API调用的简单模拟

如何编写返回异步的API调用的简单模拟
EN

Stack Overflow用户
提问于 2018-08-18 03:41:04
回答 2查看 614关注 0票数 1

有一个示例应用程序有一个级别的db Node JS库,但我的服务器当前没有安装级别的db,我也不需要它。

我如何编写一个简单的类来模拟API调用。

store变量是我想模拟的库,它有两个API调用:

代码语言:javascript
复制
  store.put   
  store.get

它有两个API调用:

代码语言:javascript
复制
const store = level('./data/dbname123', { valueEncoding: 'json' });

save() {
  debug(`saving id: ${this.id}`);
  const properties = attributes.reduce((props, attr) => {
    props[attr] = this[attr];
    return props;
  }, { fields: this.fields });
  return new Promise((resolve, reject) => {
    store.put(this.id, properties, (error) => {
      if (error) { return reject(error); }
      resolve(this);
    });
  });
}


 static find(id) {
    debug(`fetching id: ${id}`)
    return new Promise((resolve, reject) => {
      store.get(id, (error, properties) => {
        if (error) { return reject(error); }
        resolve(new Ticket(properties));
      });
    });
  }

我怎么才能快速地模仿这些呢?我不太熟悉这种风格的JavaScript,但由于promise包装器的原因,我不确定这是异步调用还是?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-18 03:51:24

您可以只创建一个带有putget方法的对象,以模拟这些方法所做的事情。只需确保您的函数遵循预期的约定-例如,如果出现问题,则调用带有错误的回调作为第一个参数。

显然,这可能会涉及到更多内容,如果您必须模拟现有的函数,Sinon等工具可以提供帮助。

例如:

代码语言:javascript
复制
// simple mocks for store.get and store.put
let store = {
    put(id, properties, fn){
        // add whatever behavior you need and call callback fn
        fn(null) // calling with null indicates no error. 
    },
    get(id, fn){
        // make some properties
        let props = {
            someProperties: "Hello",
            id: id
        }
        // call callback
        fn(null, props)
    }
}


function save() {
    return new Promise((resolve, reject) => {
      store.put('id', 'properties', (error) => {
        if (error) { return reject(error); }
        resolve();
      });
    });
  }
  
function find(id) {
      return new Promise((resolve, reject) => {
        store.get(id, (error, properties) => {
          if (error) { return reject(error); }
          resolve(properties);
        });
      });
    }

// try them out

find("21")
.then(console.log)

save()
.then(() => console.log("done"))

票数 1
EN

Stack Overflow用户

发布于 2018-08-18 03:57:27

也许我的答案不符合你的问题,但是为了模拟你的库,你可以创建你自己的存储

代码语言:javascript
复制
const store = function () {
  var data = {};

  return {
    put: function(id, props, fn) {
       data[id] = props;
       fn(null);
    },
    get: function(id, fn) {
      fn(null, data[id]);
    } 
  }
}();

如果你像这样定义你的存储,你就是在模仿你的库

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51901937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档