我试图将一个全新的对象保存到我的数据库中,但前提是它还没有存在。为此,我在其他方法中创建了这个方法来进行两次验证:(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: '' }
。
我做错了什么?任何帮助将不胜感激。
答案 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();
})
};