javascript - 在 JavaScript 中加入线程

标签 javascript node.js

可能之前问过,但经过认真搜索后我仍然找不到合适的解决方案。请考虑这样的事情:

function compute() {
  asyncCall(args, function(err, result) {
  });
  /* 'join thread here' */
}

尽管asyncCall是异步的,我想使用结果并从函数compute同步返回它。 asyncCall 是一个库调用,我无法以任何方式修改它。

如何在没有setTimeout并观察条件变量的情况下正确等待异步结果?这是可能的,但不是最理想的。

最佳答案

不确定如何真正使用尚不存在的东西,但返回结果将是的槽很容易:

function compute() {
 var rez=[];
  asyncCall(args, function(err, result) {
    rez[0]=result;
    if(rez.onchange){ rez.onchange(result); }
  });
  /* 'join thread here' */
 return rez;
}

现在,你可以引用return的[0]属性,一旦回调进来,compute()[0]就会得到结果。它还将触发一个事件处理程序,您可以将其附加到返回的数组,当回调中的数据更新时,该事件处理程序将触发。

我会使用更正式的东西,比如 promise 或二次回调,但这就是我......

编辑:如何集成回调上游:

// sync (old and busted): 
function render(){
  var myView=compute();
  mainDiv.innerHTML=myView;
}

//async using my re-modified compute():
function render(){
  var that=compute();
  that.onchange=function(e){ mainDiv.innerHTML=e; }
}

看看如何让它等待只在渲染函数中添加一个包装器?

关于javascript - 在 JavaScript 中加入线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16993377/

相关文章:

带有事件的 javascript cloneNode

javascript - 在来自 URL 的推文中插入换行符?

node.js - 将 PCM-Streams 传输到一个函数中

node.js - 无法通过express项目连接到mongodb

node.js - 如何在 Node Js 应用程序的多个实例之间同步对象

node.js - Mocha 使用 Knex 测试 PostgreSQL 时出现 MigrationLocked 错误

javascript - 如何将两个查询对象合并为一个?

javascript - 当通过 javascript .submit 提交 for 时,阻止 jquery 中的表单提交

javascript - 如何从 Javascript/Google App 脚本中的另一个函数调用数组

node.js - Google Drive API v3 - 将 doc 转换为 pdf