Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js-承诺和承诺语句(if、switch等)-如何构造?_Javascript_Node.js_Architecture_Promise_Structure - Fatal编程技术网

Javascript Node.js-承诺和承诺语句(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

您能推荐如何正确处理包含许多if/开关和承诺的控制流吗?我发现互联网上的所有教程都倾向于处理简单的控制流,没有许多(任何?)不同的处理分支。有没有建议阅读或至少搜索的词汇

我现在的做法是将if/switch逻辑封装在一个函数中,该函数在评估条件后返回承诺并返回到主流程循环。有没有办法做得更好,更好

示例代码:

// 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);
       ...
   }
   ...
}, ...