首页 > 解决方案 > NodeJS 承诺:我有竞争条件问题吗?

问题描述

我有一些在事件发生时运行的代码,并调用一个 CPU 密集型方法,该方法在可用信息区域上查找并创建锁定/保持,然后锁定该空间

为了使这个非阻塞 CPU 密集型方法通过返回一个 promise 异步运行,然后 promise .then 代码块使用 lockSelectedSpace 将该区域设置为锁定。

function eventCode(params){
  findFreeSpace(params).then((details)=>{
     lockSelectedSpace(details);
  });  
}

function findFreeSpace(details){
   //cpu itensive operation here
   resolve({success:true});
} 

function lockSelectedSpace(details){
  // lock the free space
}

我的问题是,lockSelectedSpace 什么时候运行?当 findFreeSpace 调用 resolve 时它会立即运行吗?还是有延迟?

我问是因为 lockSelectedSpace 在 findFreeSpace 上运行很重要,两个用户不可能锁定同一个空间

谢谢

标签: javascriptnode.js

解决方案


lockSelectedSpacefindFreeSpace将在成功解决承诺后立即运行。当您将此函数放在函数内部时,.then您会明确地等待承诺在运行之前解决lockSelectedSpace。你能提供一个你认为是竞争条件的例子吗?


推荐阅读