小编Cha*_*ear的帖子

redux动作创建器中的依赖注入

我目前正在构建一个学习者React/Redux应用程序,我无法解决如何为服务进行依赖注入.

更具体一点:我有一个BluetoothService(抽象第三方库)扫描并通过蓝牙连接到其他设备.该服务被动作创建者利用,如下所示:

deviceActionCreators.js:

const bluetoothService = require('./blueToothService')
function addDevice(device) {
   return { type: 'ADD_DEVICE', device }
}

function startDeviceScan() {
   return function (dispatch) {
      // The Service invokes the given callback for each found device
      bluetoothService.startDeviceSearch((device) => {
          dispatch(addDevice(device));
      });
   }
}
module.exports = { addDevice, startDeviceScan };
Run Code Online (Sandbox Code Playgroud)

(我正在使用thunk-middleware)

我的问题是:如何将服务本身注入动作创建者?

我不希望硬编码require(或import在ES6中),因为我认为这不是一个好的模式 - 除了使测试更加困难之外.我还希望能够在我的工作站(没有蓝牙)上测试应用程序时使用模拟服务 - 所以根据环境我希望在我的action-creator中注入相同界面的其他服务.使用静态导入是不可能的.

我已经尝试将bluetoothService作为Method本身的一个参数(startDeviceScan(bluetoothService){}) - 有效地使方法本身是纯粹的 - 但这只是使用动作将问题移动到容器.每个容器都必须知道该服务然后获得它的实现(例如通过props).另外,当我想在另一个动作中使用动作时,我又会遇到同样的问题.

目标:我想决定在我的应用程序中使用哪些实现的自举时间.这样做是否有好方法或最佳实践?

javascript dependency-injection reactjs redux

20
推荐指数
2
解决办法
6280
查看次数

链接角$ timeout

我正在尝试将调用链接到AngularJS的$timeout函数.我在这里看到很多线程允许链接承诺,一些特别使用角度$q,但这似乎应该是超级简单.我想我错过了一些明显的东西.这就是我想要的是什么喜欢做的事:

$timeout(firstFunction, firstDelay)
.then($timeout(secondFunction, secondDelay))
.then($timeout(thirdFunction, thirdDelay));
Run Code Online (Sandbox Code Playgroud)

当所有三个函数都被调用时,$timeouts都会同时启动.我可以看出为什么这不起作用,但我怎样才能得到我想要的东西?我甚至可以在这里使用承诺吗?我以前只是安排延迟,以便他们级联,但这似乎更多的工作维持...

javascript timeout promise angularjs

5
推荐指数
1
解决办法
1713
查看次数