gpt4 book ai didi

javascript - 如何组合 Promise

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:46 25 4
gpt4 key购买 nike

我尝试在 Node.js 应用程序中组合多个 Promise。但每次尝试我都没有得到任何结果。

如果没有创建数据库,则不会调用函数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(...)),如果不存在则创建表。我认为这应该更清楚地反射(reflect)在您的代码中:

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
});
}

各个功能应该稍微简单一些,我认为调试也会更简单,这样你就可以缩小实际问题的范围。

关于javascript - 如何组合 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com