【问题标题】:How to make node fs like sync function如何使节点 fs 像同步功能
【发布时间】:2019-08-21 05:34:17
【问题描述】:
async function testSync() {
  var result = await new Promise(function (resolve) {
    test(function (result) {
      resolve(result);
    });
  });
  return result;
}

function test(callback) {
  setTimeout(callback, 1000);
}

async function run() {
  console.log(1);
  var r = await testSync();
  console.log(r)
  console.log(3);
}

run();

我成功地做了两个函数。一个异步一个同步,但是我不得不将 testSync() 放在异步函数中。

但是运行节点模块函数fs.readfilesync(),比如我不用做 那。有人可以解释我为什么以及如何制作同步功能,例如 fs 是吗?

【问题讨论】:

  • 不,你所有的函数都可以被认为是异步的。尤其是定义为async function 的那些。您通过不对它们执行任何异步操作来创建同步函数。基础库中不可能实现同步睡眠,这也不是一个好主意。
  • nodejs 中的同步 fs 函数很可能是用 c/c++ 编码的——因此,在 nodejs 中创建同步函数的一种方法是使用 node-FFI,例如
  • 如果某件事看起来很难,这可能表明这是解决您要解决的任何问题的糟糕方法。你能state your real problem,假设这不是纯粹出于好奇吗?谢谢。

标签: javascript node.js


【解决方案1】:

从节点 8.0.0 开始,你可以使用这个:

const fs = require('fs');
const util = require('util');

const readdir = util.promisify(fs.readdir);

async function myF() {
  let names;
  try {
    names = await readdir('path/to/dir');
  } catch (err) {
    console.log(err);
  }
  if (names === undefined) {
    console.log('undefined');
  } else {
    console.log('First Name', names[0]);
  }
}

myF();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多