首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么生成器中的console.logs以这样的顺序出现?

为什么生成器中的console.logs以这样的顺序出现?
EN

Stack Overflow用户
提问于 2016-05-15 21:33:51
回答 2查看 960关注 0票数 0

有了下面的代码,我想问两个问题(主要问题和次要问题):

  1. 在生成器函数中,承诺p是在console.log (第二)之前生成的,那么为什么console.log(第二)在console.log之前记录的是给定的承诺呢?
  2. 我在某个地方看到(在koa框架中完成的)代码中使用了返回值(请参见返回“一些值”)(与响应一起发送回客户端).我怎么能在我的基因功能中console.log呢?有可能吗?
代码语言:javascript
复制
var p = new Promise((resolve) => {
    resolve('should go first?');
})

var resp = p.then((first) => {
    console.log(first);
    return 'some value'; //pertain to the secondary question
})


function* gen(prom){
    var second = yield prom;
    console.log(second);
}

var it = gen(resp);

it.next();
it.next('should go second?');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-16 09:32:49

  1. 在生成器函数中,承诺p是在console.log (第二)之前生成的,那么为什么console.log(第二)在console.log之前记录的是给定的承诺呢?

您正在产生的是承诺对象,如果您检查它的值,您将看到状态是pending

..How,我能用我的基因函数console.log它吗?有可能吗?

then方法中,可以对其进行记录。

代码语言:javascript
复制
var p = new Promise((resolve) => {
    resolve('should go first?');
})

var resp = p.then((first) => {
    console.log(first);
    return 'some value'; //pertain to the secondary question
})


function* gen(prom){
    var second = yield prom;
    console.log(second);   
    
    prom.then((x)=> {
    	console.log(x);
    });
}

var it = gen(resp);

var first = it.next().value;
console.log(first);

it.next('should go second?');

票数 1
EN

Stack Overflow用户

发布于 2016-05-15 22:33:08

问题1.

  1. 允诺p的执行器在调用时以“应先执行”的方式同步解析承诺。
  2. resp设置为调用p上的then返回的承诺。注意,提供给允诺的onFulfilled函数从未在提供它的同一个线程中执行。如果承诺已经解决,回调将在当前线程完成执行后在自己的线程中调度。
  3. it被设置为生成器函数的迭代器。代码仍在从顶部同步执行。
  4. it.next()被调用并返回承诺对象resp (未使用)。
  5. 再次调用it.next(),并将其作为生成器函数中的收益率的返回值来表示,后者将其记录到控制台。
  6. 发布的代码线程完成执行。允诺onFulfilled的p侦听器被安排在即将执行的时候,并在执行时记录should go first

问题2.

some value当前从p的已完成的侦听器返回,因此将用于填充通过调用.then on resp创建的下一个链接承诺。如果要将其传递给生成器函数,请将return 'some value'替换为it.next('some value')

结论

底线是,所有在一段同步代码中定义的对象都是完整地创建的,在通过/..catch调用提供的onFulfilledonRejected函数的任何异步处理开始之前,都会建立回叫链接。即使承诺在定义期间(同步地)被解决,这也是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37243894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档