小编Jwa*_*622的帖子

了解事件循环

我在想它,这就是我提出的:

假设我们有这样的代码:

console.clear();
console.log("a");
setTimeout(function(){console.log("b");},1000);
console.log("c");
setTimeout(function(){console.log("d");},0);
Run Code Online (Sandbox Code Playgroud)

请求进来,JS引擎开始逐步执​​行上面的代码.前两个呼叫是同步呼叫.但是当谈到setTimeout方法时,它就变成了异步执行.但是JS立即从它返回并继续执行,这被称为Non-BlockingAsync.并继续致力于其他等

执行结果如下:

ACDB

所以基本上第二个setTimeout完成第一个,它的回调函数比第一个更早执行,这是有道理的.

我们在这里谈论单线程应用程序.JS引擎继续执行此操作,除非它完成第一个请求,否则它不会进入第二个请求.但好处是它不会等待阻塞操作,比如setTimeout解决所以它会更快,因为它接受新的传入请求.

但我的问题出现在以下几个方面:

#1:如果我们讨论的是单线程应用程序,那么setTimeouts当JS引擎接受更多请求并执行它们时,什么机制会处理?单个线程如何继续处理其他请求?什么工作,setTimeout而其他请求继续进入并执行.

#2:如果这些setTimeout函数在幕后执行,而有更多请求进入和执行,那么在幕后执行异步执行的是什么?我们谈到的这件事叫EventLoop什么?

#3:但是不应该将整个方法放入,EventLoop以便整个事件被执行并调用回调方法?这是我在谈论回调函数时所理解的:

function downloadFile(filePath, callback)
{
  blah.downloadFile(filePath);
  callback();
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,JS引擎如何知道它是否是异步函数,以便它可以将回调EventLoop? Perhaps something like the放在C#中的async`关键字中,或者某种属性指示JS引擎将采用的方法是异步方法并应相应地对待.

#4:但是一篇文章说的与我猜测事情可能如何起作用完全相反:

Event Loop是一个回调函数队列.执行异步函数时,回调函数将被推入队列.在执行异步函数之后的代码之前,JavaScript引擎不会开始处理事件循环.

#5:这里有这个图像可能会有所帮助,但图像中的第一个解释是说第4个问题中提到的完全相同:

在此输入图像描述

所以我的问题是要对上面列出的项目做一些澄清?

javascript multithreading asynchronous event-loop node.js

126
推荐指数
3
解决办法
5万
查看次数

GRPC与REST有何不同?

我正在阅读GRPC的这个解释,这个图表很有意思:

在此输入图像描述

传输层如何工作?如果它在网络上......为什么它被称为RPC?更重要的是,这与为服务层实现API的REST有何不同(客户端中的类具有发出http请求的方法)?

rest grpc

90
推荐指数
3
解决办法
5万
查看次数

什么是**glob角色?

我的反应gulpfile中有这条路径:

var path = {
  HTML: 'src/index.html',
  ALL: ['src/js/*.js', 'src/js/**/*.js', 'src/index.html'],
  JS: ['src/js/*.js', 'src/js/**/*.js'],
  MINIFIED_OUT: 'build.min.js',
  DEST_SRC: 'dist/src',
  DEST_BUILD: 'dist/build',
  DEST: 'dist'
};
Run Code Online (Sandbox Code Playgroud)

什么是双球形角色?

我知道单个glob是什么......但是双重的是什么? 单个水珠

glob gulp

68
推荐指数
4
解决办法
2万
查看次数

如何撤消git commit --amend

我不小心输入了一个git commit --amend.这是一个错误,因为我意识到提交实际上是全新的,它应该用新消息提交.我想做一个新的提交.我该如何撤消这个?

git

42
推荐指数
1
解决办法
3万
查看次数

为什么安全导航比在Rails中使用try更好?

我正在读这个.使用它有什么好处:

user&.address&.state
Run Code Online (Sandbox Code Playgroud)

过度

user.try(:address).try(:state)
Run Code Online (Sandbox Code Playgroud)

我还是不明白.

ruby ruby-on-rails-4

31
推荐指数
3
解决办法
7880
查看次数

在rspec中描述vs context.区别在哪里?

我已经阅读了一些关于如何组织rspec代码的内容.似乎"上下文"更多地用于对象的状态.用你的话来说,你如何描述如何在rspec代码中使用"describe"?

这是我的movie_spec.rb代码的片段:

require_relative 'movie'

describe Movie do

    before do
        @initial_rank = 10
        @movie = Movie.new("goonies", @initial_rank)
    end


    it "has a capitalied title" do
        expect(@movie.title) == "Goonies"
    end


    it "has a string representation" do
        expect(@movie.to_s).to eq("Goonies has a rank of 10")
    end

    it "decreases rank by 1 when given a thumbs down" do
        @movie.thumbs_down
        expect(@movie.rank).to eq(@initial_rank - 1)
    end

    it "increases rank by 1 when given a thumbs up" do
        @movie.thumbs_up
        expect(@movie.rank).to eq(@initial_rank + 1)
    end

    context "created with a default …
Run Code Online (Sandbox Code Playgroud)

ruby rspec describe

16
推荐指数
1
解决办法
1万
查看次数

什么是factory_girl瞬态属性?我为什么要用一个?

我从Thoughtbot 读到这个,但它仍然让我感到困惑.

这是他们的例子:

factory :user do
  transient do
    rockstar true
    upcased  false
  end

  name  { "John Doe#{" - Rockstar" if rockstar}" }
  email { "#{name.downcase}@example.com" }

  after(:create) do |user, evaluator|
    user.name.upcase! if evaluator.upcased
  end
end

create(:user, upcased: true).name
#=> "JOHN DOE - ROCKSTAR"
Run Code Online (Sandbox Code Playgroud)

所以,

  1. .upcased模型的真正属性吗?
  2. 什么是transient块真正在做什么?设置可以在工厂中使用的变量?
  3. 什么是evaluator?它总是需要最后传递吗?如果您的create函数使用特征,瞬态并具有多个值,该怎么办?

ruby ruby-on-rails ruby-on-rails-3 factory-bot

14
推荐指数
1
解决办法
2513
查看次数

如何在atom中创建markdown片段.

谁知道怎么样?我正在尝试这个,但它不起作用:

'text.html.markdown':
  'Bash':
    'prefix': '`B'
    'body': '```Bash\n\n```'
  'rubyonrails':
    'prefix': '`r'
    'body': '```rubyonrails\n\n($1)```'
Run Code Online (Sandbox Code Playgroud)

atom-editor

13
推荐指数
1
解决办法
2510
查看次数

React的数据绑定真的是一种方式吗?看起来好像是双向的

这是我正在阅读的几个React教程:

国家推动Facebook的人称之为单向反应数据流,这意味着我们的UI将对每个状态变化作出反应.

通常,UI具有许多状态,这使得管理状态变得困难.通过每次发生任何状态更改时重新呈现虚拟DOM,React可以更容易地思考应用程序所处的状态.过程看起来像这样,Signal通知我们的应用程序一些数据已更改→重新呈现虚拟DOM - >使用新虚拟DOM区分以前的虚拟DOM - >仅更新具有必要更改的真实DOM.

第一个引用似乎表明数据流从React到UI.但第二个引用似乎表明它从DOM到React,然后重新渲染虚拟DOM和diff进程,而不是重新绘制真正的DOM.这听起来很像Angular的双向数据绑定.

这是真的?我错过了什么?单向反应数据流是Angular的双向数据绑定的另一个名称吗?

angularjs reactjs

12
推荐指数
2
解决办法
3396
查看次数

在Ruby中使用(:send)关键字参数?

我有一个私有方法,我试图在Ruby中使用#send进行一些测试.该方法很复杂,我不希望暴露在类之外,所以我想测试方法,但我也不需要将它列为公共方法.它有关键字参数.我如何使用它send来调用方法,但也传递关键字参数/命名参数?有办法吗?

该方法如下所示:

def some_method(keyword_arg1:, keyword_arg2:, keyword_arg3: nil)

ruby

11
推荐指数
1
解决办法
3363
查看次数