javascript - 仅在获取所有文件后执行命令

标签 javascript node.js asynchronous promise async-await

我的服务器上的所有脚本都基于 PHP,但一项任务只能使用 Node.js 来解决。

Node.js 从数据库获取 URL 列表,获取每个页面的内容并将其写入文件。之后,Node.js 调用 PHP 脚本,该脚本可处理保存的文件。

const filesystem = require('fs');
const requestPromise = require('request-promise');
const mysql = require('mysql');
const database = mysql.createConnection({});

database.connect(function(err){
    if (err){throw err}
    database.query('SELECT * FROM pages', function(err, result) {
        if (err){throw err}
        Object.keys(result).forEach(function(key){
            let page = result[key];
            let url = "https://www.website.com/" + page.url
            requestPromise({})
                .then((html) => {
                    filesystem.writeFile(page.id + '.html', html, function(err){
                        if (err){return console.log(err)}
                    });
                })
                .catch((err) => {console.log(err)})
        })//foreach
    })
})//database.connect

//only after all files have been got and filled!
requestPromise({uri: 'http://127.0.0.1/parse_with_php'})

但问题是调用本地脚本时,并没有保存所有文件。

附注获取和保存 URL 后面的内容需要花费大部分时间,但不会从数据库中获取几行。

最佳答案

您应该等待数据库完成其任务,然后调用本地脚本。为此,您可以将所有数据库代码封装到 Promise 中,并在完成时调用脚本(在 Promise 的 then() 内)。

另一个选项是设置回调函数并在数据库查询完成后调用本地脚本。

关于javascript - 仅在获取所有文件后执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594047/

相关文章:

javascript - JavaScript 规范是否定义运行时应如何跟踪在表达式中创建的对象?

javascript - 如何在 JSDoc 中引用模块中的常量

javascript - 在对 api 的 $http 请求成功后,Angular $q 库将方法链接起来?

javascript - jQuery:如何让 ajaxSend 在继续之前等待另一个 Ajax 响应?

Javascript : Unexpected empty element in array with different key types?

Javascript执行两个函数addEventlistener并延迟其中之一

javascript - 在 Typescript 中向基类添加扩展

node.js - 停止测试运​​行 mocha

javascript - 为什么Webstorm显示不可能的结果?

C# HttpClient 跟踪卡住