【发布时间】:2018-10-16 23:50:01
【问题描述】:
我从阿奇博尔德那里读到了this link。关于 Promises 的详细信息,一切都很清楚,除了 spawn 函数:
function spawn(generatorFunc) {
function continuer(verb, arg) {
var result;
try {
result = generator[verb](arg);
} catch (err) {
return Promise.reject(err);
}
if (result.done) {
return result.value;
} else {
return Promise.resolve(result.value).then(onFulfilled, onRejected);
}
}
var generator = generatorFunc();
var onFulfilled = continuer.bind(continuer, "next");
var onRejected = continuer.bind(continuer, "throw");
return onFulfilled();
}
我理解意图,但上面的代码不清楚。有人能解释一下上面 spawn 函数中发生了什么,它神奇地使 yield 起作用吗?
编辑 1:
我刚刚阅读了有关生成器模式的更多信息,并试图了解它如何适应上述内容。我很困惑
- result = generatorverb;
-
最后
var 生成器 = generatorFunc(); var onFulfilled = continuer.bind(continuer, "next"); var onRejected = continuer.bind(continuer, "throw"); 返回 onFulfilled(); }
编辑 2
我想我已经想到 - 它允许生成器函数产生承诺,然后包装器生成函数只会在先前返回的(产生的)承诺解决后才在生成器函数上执行“下一个”。大脑冻结!
【问题讨论】:
标签: javascript