Javascript Node.js-承诺和承诺语句(if、switch等)-如何构造?
您能推荐如何正确处理包含许多if/开关和承诺的控制流吗?我发现互联网上的所有教程都倾向于处理简单的控制流,没有许多(任何?)不同的处理分支。有没有建议阅读或至少搜索的词汇 我现在的做法是将if/switch逻辑封装在一个函数中,该函数在评估条件后返回承诺并返回到主流程循环。有没有办法做得更好,更好 示例代码:Javascript Node.js-承诺和承诺语句(if、switch等)-如何构造?,javascript,node.js,architecture,promise,structure,Javascript,Node.js,Architecture,Promise,Structure,您能推荐如何正确处理包含许多if/开关和承诺的控制流吗?我发现互联网上的所有教程都倾向于处理简单的控制流,没有许多(任何?)不同的处理分支。有没有建议阅读或至少搜索的词汇 我现在的做法是将if/switch逻辑封装在一个函数中,该函数在评估条件后返回承诺并返回到主流程循环。有没有办法做得更好,更好 示例代码: // Check if argument is a valid URL Promise.promisify(checkUrl)().then(() => { // D
// Check if argument is a valid URL
Promise.promisify(checkUrl)().then(() => {
// Delete all query parameters from URL if present
return sanitizer.cleanAsync(argv.url)
}).then(_cleanUrl => {
cleanUrl = _cleanUrl;
logger.warn(`URL: ${cleanUrl}`);
// Validate Google Analytics view id supplied as '--gaId=<id>' command line argument or exit if it is not present
return Promise.promisify(checkGaId)()
}).then(() => {
// Check if DB exists, if not create it
return db.checkIfDatabaseExistsAsync()
}).then(() => {
// Check if all tables exist, if not create them
return db.checkTablesAsync()
}).then(() => {
// Check DB integrity (possiblDelete all query parameters from URL if presente to turn off in the config)
if (config.database.checkIntegrity) {
return db.integrityChecksAsync();
}
}).then(() => {
// Check if URL already exists in DB, if not insert it
return db.getOrCreateEntryUrlIdAsync(cleanUrl)
}).then(_entryId => {
entryId = _entryId;
// Check if any previous executions for the entry point exist and if so whether the last one completed
return db.getLastExecutionDataAsync(entryId);
}).then(lastExecution => {
// If last execution was not completed prompt for user action
return processLastExecution(entryId, lastExecution)
}).then(_pages => {
... more code follows here...
}
有没有更好/更清晰地封装或服务if/开关逻辑的方法
哦,如果有人想知道这是一个命令行脚本,不是一个web应用程序,这也不是Node.js的目的。我认为最好使用generator,然后您可以编写类似同步的代码:
co(function* () {
// Check if argument is a valid URL
if (yield checkUrl) {
var cleanUrl = yield sanitizer.cleanAsync(argv.url);
...
}
...
}, ...
co可以与callback和promise合作,请参见谢谢您的想法,但我宁愿坚持承诺,如果没有必要,也不要添加更多依赖项。
co(function* () {
// Check if argument is a valid URL
if (yield checkUrl) {
var cleanUrl = yield sanitizer.cleanAsync(argv.url);
...
}
...
}, ...