为什么Yield不能与请求模块一起使用?

问题描述 投票:0回答:1

我有一个场景,我有一个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。我认为有两个和三个从未被评估过。

javascript node.js ecmascript-6 generator yield
1个回答
2
投票

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

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

[1,2,3].forEach(function (obj) {
  var {value:output} = _fetch(obj).next();
  console.log("output:", output);
});
© www.soinside.com 2019 - 2024. All rights reserved.