Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
Node.js NodeJ需要多个脚本同步执行_Node.js - Fatal编程技术网

Node.js NodeJ需要多个脚本同步执行

Node.js NodeJ需要多个脚本同步执行,node.js,Node.js,我是一个NodeJS和Stack Overflow新手,所以我希望你不会觉得这个问题有侮辱性:) 我创建了几个脚本,帮助我自动化日常工作(整合不同供应商的价格和库存)。 现在我需要按顺序执行代码,以便在启动主“app.js”文件时脚本(独立的.js文件)一个接一个地执行。我已尝试“嵌套”所有函数,但不起作用。 我已经找了两天的解决方案,不能再在一个循环中运行了,所以我希望有更多经验的人能帮助我 var myConfig1 = require('./first.js'); var myConfig

我是一个NodeJS和Stack Overflow新手,所以我希望你不会觉得这个问题有侮辱性:) 我创建了几个脚本,帮助我自动化日常工作(整合不同供应商的价格和库存)。
现在我需要按顺序执行代码,以便在启动主“app.js”文件时脚本(独立的.js文件)一个接一个地执行。我已尝试“嵌套”所有函数,但不起作用。
我已经找了两天的解决方案,不能再在一个循环中运行了,所以我希望有更多经验的人能帮助我

var myConfig1 = require('./first.js');
var myConfig2 = require('./second.js');
var myConfig3 = require('./third.js');
myConfig1.one();
myConfig2.two();
myConfig3.three();
所以当我运行第二个脚本时,首先运行第一个脚本。。。我知道这是由于nodeJS的异步特性造成的,但我不能让它正常工作

来自first.js的代码


exports.one = function(){
let mysql = require('mysql');
var fs = require('fs');
let connection = mysql.createConnection({
    host: '///',
    user: '///',
    password: '///',
    database: '///'
});
connection.connect(function(err) {
    if (err) throw err;

    connection.query("SELECT * FROM `2UyqqIA_postmeta` WHERE `meta_key` LIKE '_sku'", function (err, results) {
        if (err) throw err;           

      fs.writeFile('sku.json', JSON.stringify(results), function (err) {
          if (err) throw err;
          console.log('SKU Saved!');
        });
    });
    connection.query("SELECT * FROM `2UyqqIA_postmeta` WHERE `meta_key` LIKE '_stock'", function (err, results) {
      if (err) throw err;           

    fs.writeFile('stock.json', JSON.stringify(results), function (err) {
        if (err) throw err;
        console.log('Stock Saved!');
      });
    });
connection.query("SELECT * FROM `2UyqqIA_postmeta` WHERE `meta_key` LIKE '_price'", function (err, results) {
    if (err) throw err;           

  fs.writeFile('price.json', JSON.stringify(results), function (err) {
      if (err) throw err;
      console.log('Price Saved!');
    });
  connection.end(function(err) {
      // The connection is terminated now
    });

});
});
}
second.js

exports.two = function(){
const mongodb = require('mongodb')
var MongoClient = mongodb.MongoClient
const url = 'mongodb://127.0.0.1:27017'
const databaseName = 'products'
var fs = require('fs')


fs.readFile('./sku.json', 'utf8', function (err, data) {
    if (err) throw err;   
    var json = JSON.parse(data);
    console.log(json.length)
    MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydb");
    for(var k = 0; k < json.length; k++){
    var myquery = { post_id: json[k].post_id };    
    var newvalues = { $set: {_id: json[k].post_id, sku: String(json[k].meta_value) } };
    dbo.collection("products").updateOne(myquery, newvalues, { upsert:true }, function(err, res) {
      if (err) throw err;

      db.close();
    });
    }
    console.log("SKU updated");
  });
})
fs.readFile('./price.json', 'utf8', function (err, data) {
    if (err) throw err;   
    var json = JSON.parse(data);
    console.log(json.length)
    MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydb");
    for(var k = 0; k < json.length; k++){
    var myquery = { post_id: json[k].post_id };
    var newvalues = { $set: {_id: json[k].post_id, price: Number(json[k].meta_value) } };
    dbo.collection("products").updateOne(myquery, newvalues, { upsert:true }, function(err, res) {
      if (err) throw err;

      db.close();
    });
    }
    console.log("Price updated");
  });
})
fs.readFile('./stock.json', 'utf8', function (err, data) {
    if (err) throw err;   
    var json = JSON.parse(data);
    console.log(json.length)
    MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydb");
    for(var k = 0; k < json.length; k++){
    var myquery = { post_id: json[k].post_id };
    var newvalues = { $set: {_id: json[k].post_id, quantity: Number(json[k].meta_value) } };
    dbo.collection("products").updateOne(myquery, newvalues, { upsert:true }, function(err, res) {
      if (err) throw err;

      db.close();
    });
    }
    console.log("Qty updated");
  });
})
}

exports.two=函数(){
const mongodb=require('mongodb')
var MongoClient=mongodb.MongoClient
常量url=mongodb://127.0.0.1:27017'
const databaseName='products'
var fs=require('fs')
fs.readFile('./sku.json',utf8',函数(err,data){
如果(错误)抛出错误;
var json=json.parse(数据);
log(json.length)
连接(url,函数(err,db){
如果(错误)抛出错误;
var dbo=db.db(“mydb”);
for(var k=0;k
假设这三个函数是异步函数。你有两个选择

使用
async/await

(async() => {
  await myConfig1.one();
  await myConfig2.two();
  await myConfig3.three();

})();

使用
。然后使用
进行承诺

myConfig1.one()
 .then(() => myConfig2.two())
 .then(() => myConfig3.three());


这意味着您正在等待第一个功能完成,然后再转到下一个功能。假设这三个函数都是异步函数,希望这对您有所帮助。你有两个选择

使用
async/await

(async() => {
  await myConfig1.one();
  await myConfig2.two();
  await myConfig3.three();

})();

使用
。然后使用
进行承诺

myConfig1.one()
 .then(() => myConfig2.two())
 .then(() => myConfig3.three());



这意味着您正在等待第一个功能完成,然后再转到下一个功能。希望这有帮助

您能在所需文件中显示一些代码吗?这将取决于
first.js
second.js
third.js
的内部内容-我们需要查看更多代码来提供帮助。当然,我已经添加了前2个.js文件。总共有10个,但我认为通过3个例子,我可以找到一个可行的解决方案。我认为您应该在使用
fs
的地方返回承诺,然后
等待
解决。谢谢!我将使用Ashish Modi示例,何时/如果我能使其发挥作用,将在这里进一步阐述。您能否在所需文件中显示一些代码?这将取决于
first.js
second.js
third.js
的内部内容-我们必须查看更多代码以提供帮助。当然,我已经添加了前2.js文件。总共有10个,但我认为通过3个例子,我可以找到一个可行的解决方案。我认为您应该在使用
fs
的地方返回承诺,然后
等待
解决。谢谢!我将使用Ashish Modi的例子,我将在这里详细说明何时/如果我让它起作用。不幸的是,它不起作用。那么,在async/await版本中,它在第一个函数生成所需的.json文件之前启动第二个函数,因此失败。In.then version-无法读取undefined的属性“then”。@PrincessMo这是一种方法-但您需要在这些函数中返回一个承诺-因此,请将这些回调封装到承诺中,或检查dock中是否有基于承诺的approach@Estradiaz你认为我应该研究变种2?(with.then)@princessMoo我的意思是你需要
exports.one=function(){return/*a promsie*/…}
即使这样也不行。它抛出一个“Error:enoint:no-this-file或directory,open./sku.json”,因为第二个脚本在第一个脚本完成并生成这些文件之前开始运行。这需要一段时间才能弄清楚。有了C和Python的背景,我觉得这就像科幻小说:)不幸的是,它不起作用。那么,在async/await版本中,它在第一个函数生成所需的.json文件之前启动第二个函数,因此失败。In.then version-无法读取undefined的属性“then”。@PrincessMo这是一种方法-但您需要在这些函数中返回一个承诺-因此,请将这些回调封装到承诺中,或检查dock中是否有基于承诺的approach@Estradiaz你认为我应该研究变种2?(那么)王子们我的意思是你需要