<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800814</guid>
        <pubDate>Fri, 07 Jun 2019 04:11:43 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800814</link>
        <description><![CDATA[Cfon: - Маста, вот как будет на async  :D <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">asyncFib(n, callback) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return callback(null, n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;async.series([</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cb =&#62; this.asyncFib(n-1, cb),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cb =&#62; setImmediate(() =&#62; this.asyncFib(n-2, cb))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;], (err, results) =&#62; callback(null, results[0] + results[1]));</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
- Причем он немного быстрее чем на промисах :blink:<br>
<br>
Епт Новичок&#33; Ты не новичек&#33; :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800768</guid>
        <pubDate>Thu, 06 Jun 2019 06:59:48 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800768</link>
        <description><![CDATA[Cfon: Нашел баг  :D <br>
Вставил лог мидлварэ <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">app.use(function (req, res, next) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;console.log(`${req.method} ${req.url}`);</div><div class="code_line">&nbsp;&nbsp; &nbsp;next();</div><div class="code_line">});</div></ol></div></div></div></div><br>
получил <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">GET /10</div><div class="code_line">fibonacci value for 10 is 55</div><div class="code_line">GET /favicon.ico</div><div class="code_line">RangeError: Maximum call stack size exceeded</div><div class="code_line">.....</div></ol></div></div></div></div><br>
выходит что кроме основного Хром посылал еще и запрос /favicon.ico&#33;  :D <br>
этот запрос обрабатывался одним и тем же get обработчиком.<br>
<br>
Что делать? <br>
Есть несколько решений первое заюзать регулярку для точной проверки url<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">app.get(/^\/(\d+)$/, function (req, res) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;var number = req.params[0];</div><div class="code_line">.....</div></ol></div></div></div></div><br>
или вставить проверку isNaN в колбэк функцию:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">app.get(&#39;/:number&#39;, function (req, res) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;var number = parseInt(req.params.number);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (isNaN(number)) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return res.send();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">.....</div></ol></div></div></div></div><br>
а можно проще<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">app.get(&#39;/:number&#39;, function (req, res) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;var number = parseInt(req.params.number) || 0;</div><div class="code_line">.....</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800763</guid>
        <pubDate>Thu, 06 Jun 2019 05:31:06 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800763</link>
        <description><![CDATA[Cfon: Вставил проверку catch в промис<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">demo.asyncFib(number).then(result =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;console.log(`fibonacci value for ${number} is ${result}`);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;res.send(`&#60;h1&#62;Fib: ${result}&#60;/h1&#62;`);</div><div class="code_line">&nbsp;&nbsp; &nbsp;})</div><div class="code_line">&nbsp;&nbsp; &nbsp;.catch(err =&#62; console.log(err));</div></ol></div></div></div></div><br>
Теперь выхлоп такой<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">RangeError: Maximum call stack size exceeded</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:43)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javascript/examples/async-demo.js:51:49)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at AsyncFuncDemo.asyncFib (/Users/cfon/workspace/javascript/examples/async-demo.js:56:36)</div><div class="code_line">&nbsp;&nbsp; &nbsp;at fib1 (/Users/cfon/workspace/javaScript/examples/async-demo.js:51:49)</div></ol></div></div></div></div><br>
Что за нафик&#33; Результат то выводит правильно&#33; :wall:<br>
Несколько раз проверял код функции asyncFib вроде все правильно  :wacko:]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800762</guid>
        <pubDate>Thu, 06 Jun 2019 05:17:08 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800762</link>
        <description><![CDATA[Cfon: Возникла трабла при тестировании  :huh: <br>
Запускаю сервер, далее запускаю Хром, печатаю <a class='tag-url' href='http://localhost:3000/10' target='_blank'>http://localhost:3000/10</a> и что вы думаете результат выводит все пучком, но в консоле пишет вот это:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(node:652) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): RangeError: Maximum call stack size exceeded</div><div class="code_line">(node:652) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800683</guid>
        <pubDate>Tue, 04 Jun 2019 03:48:47 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800683</link>
        <description><![CDATA[Cfon: - Маста, а можно ускорить вычисление числа фибоначи?  :huh: <br>
Да конечно можно :)  <br>
Можно применить так называмую мемоизацию результатов вычисления тем самым у нас в разы уменьшится количество вычислений. <br>
- Как это? :scratch: <br>
Например<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class AsyncFuncDemo {</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;this.asyncFib = (function () {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var numbers = [0, 1];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return async function (n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const fib1 = () =&#62; Promise.resolve(this.asyncFib(n-1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;const fib2 = () =&#62; new Promise(resolve =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setImmediate(() =&#62; resolve(this.asyncFib(n-2)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var num = numbers[n];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (typeof(num) === &#39;undefined&#39;) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;num = await fib1() + await fib2(); &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;numbers[n] = num;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return num; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;})();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">.....</div></ol></div></div></div></div><br>
Я перенес определение асинхронной функции в конструктор поскольку в классе нельзя производить вычисления. Они нам нужны поскольку я использую iife.<br>
Правда теперь юзать такую оптимизированую функцию для демонстрации асинхронного вычисления не имеет смысла, поскольку она синхронно вычисляется очень быстро для любого значения :D]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800646</guid>
        <pubDate>Mon, 03 Jun 2019 07:25:25 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800646</link>
        <description><![CDATA[Cfon: Проверил асинхронность в действии создал Express сервер и что вы думаете через process.nextTick асинхронности нет&#33; Делаю два запроса и оба висят&#33; <br>
Заменил на setImmediate теперь все пучком&#33; :D<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const express = require(&#39;express&#39;); </div><div class="code_line">const async = require(&#39;async&#39;);</div><div class="code_line">const { performance } = require(&#39;perf_hooks&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">class AsyncFuncDemo {</div><div class="code_line">&nbsp;&nbsp; &nbsp;async asyncFib(n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return n; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const fib1 = () =&#62; Promise.resolve(this.asyncFib(n-1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const fib2 = () =&#62; new Promise(resolve =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setImmediate(() =&#62; resolve(this.asyncFib(n-2)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return await fib1() + await fib2(); &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fib(n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return n;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return this.fib(n-1) + this.fib(n-2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">const app = express();</div><div class="code_line">&nbsp;</div><div class="code_line">app.get(&#39;/:number&#39;, function (req, res) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;var time = performance.now();</div><div class="code_line">&nbsp;&nbsp; &nbsp;var demo = new AsyncFuncDemo;</div><div class="code_line">&nbsp;&nbsp; &nbsp;var number = req.params.number;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;demo.asyncFib(number).then(result =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;console.log(&#39;fibonacci value for %d is %d&#39;, number, result);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;time = performance.now() - time;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;console.log(&#39;Время выполнения = &#39;, time);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;res.send(&#39;&#60;h1&#62;Fibonacci value: &#39; + result + &#39;&#60;/h1&#62;&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;});</div><div class="code_line">});</div><div class="code_line">&nbsp;</div><div class="code_line">app.listen(3000, function () {</div><div class="code_line">&nbsp;&nbsp; &nbsp;console.log(&#39;Test-server is running on port 3000&#39;);</div><div class="code_line">});</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800571</guid>
        <pubDate>Sat, 01 Jun 2019 02:49:34 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800571</link>
        <description><![CDATA[Cfon: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414912&view=findpost&p=3800323'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ya2500 &#064; <time class="tag-quote__quoted-time" datetime="2019-05-29T11:59:52+00:00">29.05.19, 11:59</time></span><div class='quote '>Неотвеченный вопрос есть <a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=414399&view=findpost&p=3800098' target='_blank'>здесь</a>.</div></div><br>
без понятия :D<br>
<br>
- Маста, а как сделать саму функцию fib асинхронной? <br>
- ну я имею ввиду чтобы она вычислялась не блокируя I/O  :huh: <br>
Новичок есть несколько приемов первое написать дополнение Node на С/C++ с использованием потоков или переписать саму функцию fib таким образом чтобы она периодически проверяла I/O.<br>
<br>
- А можно примерчик?  :scratch: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-06-01T03:35:45+00:00">01.06.19, 03:35</time></span></span><br>
Вот например <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class AsyncFuncDemo {</div><div class="code_line">&nbsp;&nbsp; &nbsp;async asyncFib(n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (typeof(n) !== &#39;number&#39;) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return new Error(&#39;First arg missing or not a number.&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return n; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const fib1 = () =&#62; new Promise(resolve =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process.nextTick(() =&#62; resolve(this.asyncFib(n-1)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;); &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const fib2 = () =&#62; new Promise(resolve =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process.nextTick(() =&#62; resolve(this.asyncFib(n-2)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return await fib1() + await fib2(); &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fib(n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return n;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return this.fib(n-1) + this.fib(n-2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">var demo = new AsyncFuncDemo();</div><div class="code_line">var number = 25;</div><div class="code_line">&nbsp;</div><div class="code_line">demo.asyncFib(number).then(result =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp;console.log(&#39;fibonacci value for %d is %d&#39;, number, result);</div><div class="code_line">});</div><div class="code_line">&nbsp;</div><div class="code_line">console.log(&#39;called asyncFib...&#39;);</div><div class="code_line">console.log(&#39;called sync fib: &#39;, demo.fib(number));</div><div class="code_line">&nbsp;</div><div class="code_line">// called asyncFib...</div><div class="code_line">// called sync fib: &nbsp;75025</div><div class="code_line">// fibonacci value for 25 is 75025</div></ol></div></div></div></div><br>
Суть в том, что надо каждую часть вычисления заключить в process.nextTick тогда I/O не будет блокироваться жестко на время вычисления тяжелой функции. <br>
<br>
Вместо async/await и промисов можно заюзать библу async.<br>
<br>
- А можно примерчик?  :huh: <br>
Можно Машку за ляжку  :lool: попробуй сделать это сам :D<br>
<br>
- Ok Маста а почему вы вычисляли фибоначи от 25 а не 42 как в предыдущем примере?<br>
Заметил таки :D просто от 42 долго вычисляется  :D<br>
Можно ускорить вычисления, убрав из fib1 process.nextTick.<br>
<br>
- Это как?  :huh: <br>
А вот так  :D <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">.....</div><div class="code_line">&nbsp;&nbsp; &nbsp;async asyncFib(n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (typeof(n) !== &#39;number&#39;) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return new Error(&#39;First arg missing or not a number.&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return n; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;const fib2 = () =&#62; new Promise(resolve =&#62; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;process.nextTick(() =&#62; resolve(this.asyncFib(n-2)))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;); </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return await this.asyncFib(n-1) + await fib2(); &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">.....</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800323</guid>
        <pubDate>Wed, 29 May 2019 11:59:52 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800323</link>
        <description><![CDATA[ya2500: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=414912&view=findpost&p=3800232'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Cfon &#064; <time class="tag-quote__quoted-time" datetime="2019-05-28T05:28:05+00:00">28.05.19, 05:28</time></span><div class='quote '>Без масты тут опять все зарасло</div></div><br>
<br>
Неотвеченный вопрос есть <a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=414399&view=findpost&p=3800098' target='_blank'>здесь</a>.]]></description>
        <author>ya2500</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800232</guid>
        <pubDate>Tue, 28 May 2019 05:28:05 +0000</pubDate>
        <title>AsyncFuncDemo</title>
        <link>https://forum.sources.ru/index.php?showtopic=414912&amp;view=findpost&amp;p=3800232</link>
        <description><![CDATA[Cfon: Без масты тут опять все зарасло :D <br>
<br>
- Маста&#33; а как написать асинхронную функцию  :huh: <br>
<br>
Хароши вопрос новичек&#33;  :D <br>
вот как будет знаменитая функция фиббоначи: <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class AsyncFuncDemo {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// async function</div><div class="code_line">&nbsp;&nbsp; &nbsp;asyncFib(n, callback) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (typeof(callback) !== &#39;function&#39;) callback = null;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (typeof(n) !== &#39;number&#39;) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return callback(new Error(&#39;First arg missing or not a number.&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;process.nextTick(() =&#62; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Block on CPU</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;var value = this.fib(n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;callback(null, value);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;});</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fib(n) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (n &#60; 2) return n;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return this.fib(n-1) + this.fib(n-2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">var demo = new AsyncFuncDemo();</div><div class="code_line">var number = 42;</div><div class="code_line">&nbsp;</div><div class="code_line">demo.asyncFib(number, function (err, value) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (err) return console.log(err);</div><div class="code_line">&nbsp;&nbsp; &nbsp;console.log(&#39;fibonaci value for %d is %d&#39;, number, value);</div><div class="code_line">});</div><div class="code_line">&nbsp;</div><div class="code_line">console.log(&#39;called asyncFib...&#39;);</div><div class="code_line">console.log(&#39;called sync fib: &#39;, demo.fib(number));</div><div class="code_line">// called asyncFib...</div><div class="code_line">// called sync fib: &nbsp;267914296</div><div class="code_line">// fibonaci value for 42 is 267914296</div></ol></div></div></div></div>]]></description>
        <author>Cfon</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      </channel>
      </rss>
	