Promise.resolve()没有被执行

时间:2018-02-19 20:17:58

标签: javascript promise

我试图将一个全新的对象保存到我的数据库中,但前提是它还没有存在。为此,我在其他方法中创建了这个方法来进行两次验证:(1)如果对象丢失,(2)如果对象已经存在。如果一切正常,请保存。代码如下:

exports.new = (obj) => {
  return Promise.resolve(() => {
    if (!obj) throw Error('object is missing');

    this.getOneAsync(obj).then(repeatedObj => {
      if (repeatedObj.length != 0) throw Error('Object already saved!');
      return obj;
    });
  }).then(obj => {
    var newObj = createModel(obj);

    return newObj.saveAsync();
  })
};

不幸的是,Promise.resolve()没有被执行。我的代码直接跳到then()子句,obj不是我的预期,总是返回{ length: 0, name: '' }

我做错了什么?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

Promise.resolve() 已执行,但不是您传递给它的功能。 Promise.resolve会立即使用您传递给它的值来解析承诺。它不会调用该函数。使用您传递给.then的函数调用Promise.resolve

Promise.resolve对您的情况无用。而是做像

这样的事情
exports.new = (obj) => {
  if (!obj) return Promise.reject(new Error('object is missing'));

  return this.getOneAsync(obj)
    .then(repeatedObj => {
      if (repeatedObj.length != 0) throw Error('Object already saved!');
      var newObj = createModel(obj);
      return newObj.saveAsync();
    });
};

答案 1 :(得分:0)

在澄清here之后,这种方式可以使用Promise.resolve()

exports.new = (obj) => {
  return Promise.resolve().then(() => {
    if (!obj) throw Error('object is missing');

    this.getOneAsync(obj).then(repeatedObj => {
      if (repeatedObj.length != 0) throw Error('Object already saved!');
      return obj;
    });
  }).then(obj => {
    var newObj = createModel(obj);

    return newObj.saveAsync();
  })
};