【问题标题】:can a javascript synchronous function be called concurrentlyjavascript同步函数可以同时调用吗
【发布时间】:2018-03-26 03:38:24
【问题描述】:

我有一个异步函数,它在其中调用一个同步函数。异步可能是并发调用的,里面的同步函数会不会有什么问题?

同步函数可以同时为两个调用者同时计算一些东西吗?还是在调用函数时,等待上一次调用完成?

【问题讨论】:

  • 如果同步函数在一个异步函数中,你将有 2 个异步函数。所以他们必须同时工作。
  • 节点是单线程的
  • javascript 中的异步与并行不同。所以不,它想引起任何问题,因为它总是会等待上一个调用完成。 developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
  • 当你说“异步函数”时,你到底是什么意思?你的意思是用async 关键字声明的吗?或者你只是说一个包含异步操作的函数?如果您包含代码示例,我们可以更具体地回答您。
  • @marko 我怎样才能让一个函数的两个调用者在不等待完成的情况下并行使用同一个函数?

标签: javascript node.js asynchronous


【解决方案1】:

Javascript 是单线程的。异步函数并不意味着它不能运行同步代码,它只是意味着它可以在遇到await 时延迟执行,并返回一个promise。如果异步函数中的某些代码调用同步函数,则该同步函数将在异步函数继续之前运行完成 - 就像在普通函数中一样。

【讨论】:

  • 先生解释得很好:)
  • 如何让其中的异步和同步函数不等待上一个调用?我希望我的异步函数中的代码一旦被调用就被执行,即使之前的调用是 0.002 秒前并且它仍在执行。
  • @Mr.Blockchain,你不能像那样中断当前线程——你只需要像往常一样调用你想要的函数,一旦堆栈到达它就会被执行。
【解决方案2】:

异步函数内部的同步函数如果要并发运行应该没有问题,例如:

setTimeout(() => console.log("First"),4000);
setTimeout(() => console.log("Second"),1000);

这两个将按指定的顺序执行,但是当它们的包含函数允许它们执行时,内部的函数将运行,因此控制台中的输出将是:

Second
First

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多