NodeJS从函数返回异步结果

NodeJS return async result from function

本文关键字:异步 结果 返回 函数 NodeJS      更新时间:2023-09-26

我是nodejs的新手,所以我有一个简单的问题,但无法解决。

例如,我有这样的函数:

var func = function(){  
  setTimeout(function(){  
    return 5;  
  }, 1000);  
}; 

当我调用func时,我得到了"undefined"。我理解为什么,但我不明白如何更改返回5而不是未定义的函数
我可以用回调参数重写func,并从setTimeout调用回调,但我希望在不使用回调的情况下从函数返回结果
在V8中,我们有生成器和关键字"yield",我认为这可能对我有帮助,所以有人能解释它是如何工作的以及如何在这个例子中使用它吗。谢谢

好吧,这是我对你的问题陈述的理解(你应该把它放在你的问题中)。

您有一个对象实例的数组,该数组具有一个异步方法,该方法最终会产生一些值。并且,您希望调用数组中的每个对象,并生成它们的异步结果的数组。

有几种方法可以解决这个问题。我将首先展示一个带有Promises的。

// your object
function MyObj() {
}
// with an async method that returns a promise
MyObj.prototype.doAsync = function() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            // create some value to resolve with here 
            // I've just substituted a random value
            resolve(Math.floor(Math.random() * 1000));
        }, 50);
    });
}
// make an array of these objects like your problem statement described
var arr = [];
for (var i = 0; i < 20; i++) {
    arr[i] = new MyObj();
}  
// collect an array of promises by running all the async methods
var promises = [];
for (i = 0; i < arr.length; i++) {
   promises.push(arr[i].doAsync());
}
// wait for all the promises to be done
Promise.all(promises).then(function(results) {
    // array of async results here
    log(results);
});
function log(x) {
    var div = document.createElement("div");
    div.innerHTML = JSON.stringify(x);
    document.body.appendChild(div);
}

有关从异步函数返回数据的一般参考,请参阅如何从异步调用返回响应?