我读过发电机不会等待promise。为什么< code>redux-saga中的生成器不是这种情况,我如何让自己的生成器等待?
例如,这个故事:
takeLatest('FETCH_USER_REQUESTED', function*() {
const fetchPromise = yield put(fetchUser());
const user = yield fetchPromise;
console.log(user)
yield 1
console.log(1)
})
将输出:
Promise
Object // <= user data fetched asynchronously
1
而不是:
Promise
undefined
1
为什么redux传奇中的发电机不是这样,我如何让自己的发电机等待?
然而,生成器本身与Promises或异步函数没有关系。生成器只是将一些资源和责任委托给上层函数来实现可中断功能。
在< code>redux-saga的情况下,有两个部分:独立的saga runner进程和调度程序(https://github . com/redux-saga/redux-saga/blob/master/src/internal/run saga . js),它由< code > saga middleware . run()命令启动,以及< code>effects反应,它将操作委托给主saga进程。
因此,ES6中模拟redux-saga
行为的最简单流程管理器将是这样的(非常简单):
const ProcessManager = (() => {
let context = new WeakMap();
function PM(rootSaga, lastValue) {
if(!context.has(rootSaga)) {
context.set(rootSaga, rootSaga())
}
const iterator = context.get(rootSaga);
const { done, value } = iterator.next(lastValue);
if(done) {
context.delete(rootSaga)
return;
}
if(Promise.resolve(value) === value) {
value.then((asyncValue) => PM(rootSaga, asyncValue))
} else {
PM(rootSaga, value)
}
}
return PM;
})()
const rootSaga = function* () {
yield new Promise(resolve => setTimeout(resolve, 500));
console.log('This will be printed after 500 ms from start');
yield new Promise(resolve => setTimeout(resolve, 500));
console.log('This will be printed after 1000 ms from start');
}
ProcessManager(rootSaga);
MDN文档 异步/等待函数的目的是简化同步使用promise的行为,并对一组promise执行某些行为。正如promise类似于结构化回调一样,async/await类似于组合生成器和promise。 我了解异步/等待、生成器和promise的基本概念。然而,我不完全理解说async/await类似于将生成器和promise结合起来意味着什么。 所以async/wait简化了生成器和promise
我正在研究ES9中提出的异步生成器,以便能够掌握逻辑。 因为每个产生的值都被用作返回对象中的值属性——由Promise包装——来自下一个()调用: 我认为这对我的promise也是正确的: 因此,这些promise被合并在一起。这听起来并不坏,但我并不认为这是因为: 那么,关键字wait与关键字yield在同一个表达式中使用完全无用,还是我遗漏了一些重要的内容?
我有一个复杂的对象图,我建立在一个Ember控制器。 所以,为了安排这一切,我基本上是想 创建conatainer, 然后,创建细节,其中可能有许多 然后,创建项目,其中会有尽可能多的细节 等待一切promise解决 启动一个自定义的Rest动作来“激活”容器,一旦它有了所有的东西。 代码看起来像这样(咖啡),简化了但我认为要点就在那里 当所有的promise都解决了,一切都是我想要的,然而,al
我正在尝试使用Axon和Saga设计模式在Micorservices之间发送数据,使用Java我有两个服务,一个用于订单,一个用于产品CQRS设计模式完美地工作,我的意思是我将数据发送到axon,我在仪表板中看到它,然后通过查询数据获取并保存在读取数据库(MySQL)中。今天我尝试使用Saga设计模式,当创建新订单时,将保留产品命令发送到axon并通过产品服务获取,但saga没有事件启动,我不知道
我正在努力学习如何正确使用async Wait,但我对它有点共同的想法。 在片段中,我试图构建一个对象数组,其中包含我需要的关于我在组件中上传的文件的信息。问题是this.fileInfo中的对象并没有完全等待返回编码图像的promise,而是在我console.logthis.fileInfo时返回此输出: 如您所见,关键图像是一个值未定义的ZoneAwarePromise。你能帮我修一下吗?
问题内容: 我正在研究Java Selenium-WebDriver。我加了 和 因为我的应用程序需要几秒钟来加载用户界面。所以我设置了2秒的隐式等待。但是我找不到元素文本框 然后我添加 现在工作正常。哪一个是更好的方法? 问题答案: 好吧,有两种类型的等待:显式和隐式等待。显式等待的想法是 隐式等待的概念是 你可以在此处获得细节上的差异。 在这种情况下,我宁愿使用显式等待(尤其是): 函数返回找