账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node.js for 循环里面有多个异步方法,如何让所有异步方法结束后,执行后面的命令
    34
    0

    在 for 循环里面,通过 mongoose 异步获取数据,如何让所有异步方法结束后,执行后面命令。

    伪代码如下:

    function getData (list) {
        let result = []
        
        list.forEach((item) => {
            if (item.type === 1) {
                //异步任务
                result.push(x)
            } elseif (item.type === 2) {
                //异步任务
                result.push(y)
            } else {
                //异步任务
                result.push(z)
            }
        })
        
        return result
    }
    
    function main () {
        // 若干代码
        let result = getData (list)
    }

    执行后 result 数据一致是空,主要是异步任务还没执行完导致,这种问题如果解决?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 选择悲伤 普通会员 1楼

      在Node.js中,你可以使用async/await语法来让多个异步方法结束后,执行后面的命令。以下是一个简单的例子:

      ```javascript const { promisify } = require('util'); const fs = require('fs');

      // 使用Promisify函数将fs模块转换为fs.promises模块 const readFileAsync = promisify(fs.readFile);

      // 定义异步方法 async function readFile(path) { try { const file = await readFileAsync(path); console.log(file); } catch (error) { console.error('Error reading file:', error); } }

      // 定义异步方法,以异步处理文件 async function writeFileAsync(path, data) { try { await fs.writeFileAsync(path, data); console.log('File written successfully'); } catch (error) { console.error('Error writing file:', error); } }

      // 使用async/await语法将所有异步方法连接起来 async function main() { // 读取第一个文件 const file1 = await readFile('path/to/file1.txt'); console.log('File 1 read successfully');

      // 读取第二个文件 const file2 = await readFile('path/to/file2.txt'); console.log('File 2 read successfully');

      // 写入第一个文件 await writeFileAsync('path/to/file1.txt', 'Hello, World!'); console.log('File 1 written successfully');

      // 写入第二个文件 await writeFileAsync('path/to/file2.txt', 'Hello, World!'); console.log('File 2 written successfully');

      // 读取第三个文件 const file3 = await readFile('path/to/file3.txt'); console.log('File 3 read successfully');

      // 读取第四个文件 const file4 = await readFile('path/to/file4.txt'); console.log('File 4 read successfully');

      // 释放所有资源 await fs.promises.promisesEach(file => fs.unlinkAsync(file), 'path/to/file1.txt'); await fs.promises.promisesEach(file => fs.unlinkAsync(file), 'path/to/file2.txt'); await fs.promises.promisesEach(file => fs.unlinkAsync(file), 'path/to/file3.txt'); await fs.promises.promisesEach(file => fs.unlinkAsync(file), 'path/to/file4.txt');

      console.log('All files removed successfully'); }

      // 启动主循环 main(); ```

      在这个例子中,我们首先定义了两个异步函数:readFilewriteFileAsync,分别用于读取和写入文件。然后,我们使用async/await语法将这两个函数连接起来,实现了文件的读取和写入操作。

      main函数中,我们首先读取并打印了前四个文件的读取状态,然后调用writeFileAsync函数,分别写入'Hello, World!'到每个文件。最后,我们调用readFile函数,再次读取并打印了最后一个文件的读取状态,然后调用fs.promises.promisesEach函数,分别释放了前四个文件的文件路径,这样在所有的异步方法结束后,会依次删除这些文件,从而确保所有文件被成功地删除。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部