如何组合承诺
How do I combine Promises
我尝试在nodejs应用程序中组合多个承诺。但是在每次尝试中,我都没有得到任何结果。
如果未创建数据库,则函数 checkForDataTable
将不会调用,但会创建数据库。如果我再次调用initDatabase
,数据库将不会再次创建(这很好),并且会创建数据表。
为什么在恶毒的开始,而不是在第一个?
请帮助我找到错误。感谢
function initDatabase(){
return checkForDatabase(dbName)
.then(checkForDataTable);
}
function checkForDatabase(databaseName){
return server.list()
.then((databases) => {
if(databaseExists(databases, databaseName)){
return database();
} else {
return server
.create(...)
.then((database) => {
return database;
});
}
});
}
function checkForDataTable(database){
return database.tables.list()
.then((tables) => {
if(dataTableExist(tables, tableName)){
return // this specific datatable
} else {
return database.tables.create(tableName)
.then((dataTable) => {
return dataTable;
});
}
});
}
function database() {
return server.use(...); // this is a promise
}
看起来重要的是
server.use(...)
在 database()
函数中调用。仅当数据库已存在时,才会发生这种情况。
尝试在创建数据库后立即执行此操作:
function checkForDatabase(databaseName){
return server.list()
.then((databases) => {
if(databaseExists(databases, databaseName)){
return database();
} else {
return server
.create(...)
.then((db) => { // Change param name or remove it
return database(); // so you can make this call
});
}
})
}
更新:如果这没有帮助,我建议您重组代码。我在这里看到三个步骤。如果数据库不存在,则创建数据库,使用数据库(server.use(...)
)并创建表(如果不存在)。我认为这应该更清楚地反映在您的代码中:
function initDatabase(){
return assertDatabaseExists(databaseName) // former check for database
.then(function() {
return server.use(/* databaseName? */); // replaces database() function
})
.then(function(database) {
assertTableExists(database); // former checkForDataTable
});
}
各个函数应该稍微简单一些,我认为调试也会更简单,因此您可以缩小实际问题的范围。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 根据id将json数组组合为一个json数组
- 接受不在列表中的值-引导组合框
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 我怎样才能获得承诺的价值
- 组合两个javascript函数
- 延期承诺值未更新/解析/延期
- Telerik rad组合框多列数据绑定
- 在承诺链中处理早期回报的最佳方式
- 组合 2 个 JavaScript .scroll 函数
- 如何使用jquery组合两个数组
- 承诺在非节点式回调上使用Bluebird
- onChange不足以从Dojo组合框触发查询
- 组合承诺和非承诺值
- 如何组合承诺
- 将多个Bluebird承诺组合到一个承诺对象中
- 如何提前退出一个由承诺组成的组合
- 组合angularjs中的2个承诺