Javascript 如何从数组异步写入JSON文件?

Javascript 如何从数组异步写入JSON文件?,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我正在抓取一些数据,并将其推送到任何数组中,从该数组将数据写入JSON文件。当前,每次推送到th数组后,它都会写入JSON文件 const myArray = []; const htmlString = await rp(url); $('a','#atozindex', htmlString).map(async (index, element) => { let link = $(element).attr('href'); i

我正在抓取一些数据,并将其推送到任何数组中,从该数组将数据写入JSON文件。当前,每次推送到th数组后,它都会写入JSON文件

    const myArray = [];
    const htmlString = await rp(url);
    $('a','#atozindex', htmlString).map(async (index, element) => {
        let link = $(element).attr('href');
        if (link) {
            //Do something
            myArray.push({ item1, item2, item3 });
            fs.writeFile("./arrayContents.json", JSON.stringify(myArray), function(err) {
                if(err) {
                    console.log(err);
                }
                console.log("Some Message");
            });
        }
    });
    return myArray;
当所有数据都已在阵列中时,我只希望在最后推送一次。比如说:

    const myArray = [];
    const htmlString = await rp(url);
    $('a','#atozindex', htmlString).map(async (index, element) => {
        let link = $(element).attr('href');
        if (link) {
            //Do something
            myArray.push({ item1, item2, item3 });
        }
    });
    fs.writeFile("./arrayContents.json", JSON.stringify(myArray), function(err) {
        if(err) {
            console.log(err);
        }
        console.log("Some Message");
    return myArray;

但是我在想这个问题时遇到了一些困难。

我想你可以这样做

$.when(mapping()).then(function( ) { // mapping is a function for your map and until it finish then do that ...

});

直到地图完成或者完成了,就这样


您可以查看并了解有关何时/then或何时完成的更多信息,请务必测试。。。但我认为您有两个选择-等待所有异步:

const myArray = [];
const htmlString = await rp(url);
$('a','#atozindex', htmlString).map(async (index, element) => {
    let link = $(element).attr('href');
    if (link) {
        //Do something
        myArray.push({ item1, item2, item3 });
    }
}).forEach(pending => await pending);
fs.writeFile("./arrayContents.json", JSON.stringify(myArray), function(err) {
    if(err) {
        console.log(err);
    }
    console.log("Some Message");
return myArray;
或者,删除异步:

const myArray = [];
const htmlString = await rp(url);
$('a','#atozindex', htmlString).map((index, element) => {
    let link = $(element).attr('href');
    if (link) {
        //Do something
        myArray.push({ item1, item2, item3 });
    }
});
fs.writeFile("./arrayContents.json", JSON.stringify(myArray), function(err) {
    if(err) {
        console.log(err);
    }
    console.log("Some Message");
return myArray;

您可能希望使用流来实现这一点。有很多方法可以连接一个可写流,然后根据需要转储任意多个自动序列化的对象。
$
变量是什么?@CertainPerformance这是为ChereIOJS准备的。除了将空数组字符串化并返回它,您从不使用
myArray
执行任何操作。你想把它推到什么地方吗?对不起,那是个打字错误,请再检查一遍
const myArray = [];
const htmlString = await rp(url);
$('a','#atozindex', htmlString).map((index, element) => {
    let link = $(element).attr('href');
    if (link) {
        //Do something
        myArray.push({ item1, item2, item3 });
    }
});
fs.writeFile("./arrayContents.json", JSON.stringify(myArray), function(err) {
    if(err) {
        console.log(err);
    }
    console.log("Some Message");
return myArray;