LINUX.ORG.RU

Сообщения slavamn

 

async await в node.js

Как вернуть непустой массив, если он заполняется в асинхронщине?

// test.js

function sleep(d) {
  d += Date.now();
  while (Date.now() < d) {};
}

for (let i = 0; i < 3; i++) {
  process.stdout.write(`${process.argv[2]}${i}`);
  sleep(1000);
}
// run-proc.js

const child_process = require("child_process");

function run_proc() {
  let arr = [];
  const proc = child_process.spawn("node", ["./test.js", "#"]);
  proc.stdout.on("data", (data) => {
    console.log(`${data}`);
    arr.push(`${data}`);
  });
  return arr;
}

console.log(run_proc());
node run-proc.js

[]
#0
#1
#2

Up

Выводит err, out при выполнении и сохраняет в Buffer. Алсо, не ломает бинарный вывод.

const child_process = require("child_process");

function run_proc(cmd, args) {
  return new Promise((resolve, reject) => {
    const proc = child_process.spawn(cmd, args);
    let stdout = [];
    let stderr = [];
    proc.stdout.on("data", (data) => {
      console.log(`${data}`);
      stdout.push(data);
    });
    proc.stderr.on("data", (data) => {
      console.error(`${data}`);
      stderr.push(data);
    });
    proc.on("close", (code) => {
      console.log(`close: ${code}`);
      resolve(Buffer.concat(stdout));
      reject(Buffer.concat(stderr));
    });
  });
}

(async () => {
  let arr = [];
  await run_proc("node", ["./test.js", "#"])
  .then(
    stdout => {
      console.log(`${stdout}`);
      arr.push(stdout);
    },
    stderr => {
      console.error(`${stderr}`);
    }
  );
  console.log(Buffer.concat(arr).length);
})();

 ,

slavamn
()

Прибить meta refresh

Вот пример:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<meta http-equiv="refresh" content="0; url=http://example.com/">
</head>
<body>

</body>
</html>

Если сделать remove() на «//meta[@http-equiv='refresh']», переадресация все равно происходит. «@run-at document-start» не помогает.

Up

Копипастой и методом тыка подобрал решение. Иногда глючит - выдает пустую страницу. И не очень понятно, почему это вообще работает.

// ==UserScript==
// @name test
// @match *
// ==/UserScript==

"use strict";

(function (window, XMLHttpRequest) {
	if (window.self !== window.top) {
		return;
	}
	window.stop();
}(this, this.XMLHttpRequest));

 

slavamn
()

RSS подписка на новые темы