为什么 Yield 不适用于请求模块?

Why Yield is not working with request module?

我有一个场景,我有一个 URL 的数组,需要使用请求 npm 模块同步评估。详细来说,Array 将是 forEach,它应该为当前 url 带来数据,然后才移动到选择下一个 url。我正在使用收益生成器。但它不起作用。请大家帮忙!

var Promise = require("bluebird");
var request = Promise.promisify(require("request"), {multiArgs: true});
Promise.promisifyAll(request, {multiArgs: true})
var url_arr = ["https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=AIzaSyDe3MyoHI6aSbYKdHOXloz9QepAMfes9XE", "https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=AIzaSyDe3MyoHI6aSbYKdHOXloz9QepAMfes9XE"];


function* fetch(obj) {
  console.log("2")
  var myobj = yield request.getAsync(obj).promise();
  console.log("3", myobj)
  return myobj;
}

url_arr.forEach(function (obj){
  console.log("1", obj)
  var output = fetch(obj);
  console.log("4, ", output);
});

在上面的代码片段中,只有 1 && 4 打印在控制台中。我认为从未评估过二和三。

从生成器函数中删除 return 语句,这会暂停生成器,调用 .next() 以获取 yielded 对象的 value

function* _fetch(obj) {
  var myobj = yield obj;
}

[1,2,3].forEach(function (obj) {
  var {value:output} = _fetch(obj).next();
  console.log("output:", output);
});