好的,所以这个问题是this question的延伸,与this question有关。调用函数格式的代码可以在第一个问题中看到。这是我的转换中的代码:
format() {
return new Promise((resolve, reject) => {
return Database.getInstance().getModel('feature_default').findAll({})
.then((databaseObjects) => {
this.getJsonObject().features = {};
for (let databaseObject of databaseObjects) {
console.log('ADD FEATURE DEFAULT TO ARRAY ' + databaseObject.id);
this.getJsonObject().features[databaseObject.id] = JSON.parse(databaseObject.default_json);
}
console.log('RESOLVE FEATURE DEFAULT');
return resolve(this.getJsonObject());
})
.catch((e) => {
return reject(e);
});
});
}
我试图删除反模式,并且我看到完全相同的行为:
format() {
return Database.getInstance().getModel('feature_default').findAll({})
.then((databaseObjects) => {
this.getJsonObject().features = {};
for (let databaseObject of databaseObjects) {
console.log('ADD FEATURE DEFAULT TO ARRAY ' + databaseObject.id);
this.getJsonObject().features[databaseObject.id] = JSON.parse(databaseObject.default_json);
}
console.log('RESOLVE FEATURE DEFAULT');
return this.getJsonObject();
})
.catch((e) => {
throw e;
});
}
以下是代码调用格式:
var promises = databaseObjects.map(databaseObject => {
var jsonObject = {};
var transform = new Transform();
transform.setDatabaseObject(databaseObject);
transform.setJsonObject(jsonObject);
transform.baseFormat()
.then(() => transform.format())
.then(() => {
res.locals.retval.addData(jsonObject);
res.locals.retval.addErrors(transform.getErrors());
res.locals.retval.addWarnings(transform.getWarnings());
}).catch((e) => {
console.log('Caught error during format of existing object: ');
console.log(e);
this.error(e, res);
throw e;
});
});
Promise.all(promises)
// ...
我已尝试在第二个问题中执行Promise.all
,其中每个承诺都会为数组添加一项功能,但这也无法解决此问题。
使用此调用,当我第一次查询服务器时,我得到了正确的结果:
{
"errors": [],
"warnings": [],
"data": [
{
"id": 1,
"name": "All",
"enabled": 1,
"features": {
...
}
}
]
}
然而,在接下来的任何电话中我都会收到:
{
"errors": [],
"warnings": [],
"data": []
}
我根本没有更改任何参数或通话。我相信我没有锁定承诺,但我不知道我应该到哪里回来。