NodeJS从函数返回异步结果
NodeJS return async result from function
我是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);
}
有关从异步函数返回数据的一般参考,请参阅如何从异步调用返回响应?
相关文章:
- 函数式javascript读取、异步、写入结果
- Typeahead.js未显示异步结果
- Meteor:如何遍历一个数组,这是一个异步方法的结果
- 根据两个异步函数调用的结果执行
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- Mongoose查找结果和异步
- 等待异步结果的 Chrome 系统调用
- 没有结果的异步查找会挂起应用
- 如何从异步.js系列返回结果
- 异步功能在预期结果时停止工作
- 为什么同步使用承诺会返回异步结果
- 角度类型提前异步结果 - 收到错误“类型错误:无法使用'in'运算符搜索 ..在..".
- 为什么我在 JavaScript 中的回调不适用于异步结果
- NodeJS从函数返回异步结果
- 从自定义panoProvider返回异步结果
- JQueryUI自动完成如何处理异步结果
- 在nodejs中添加异步结果到数组
- 如何在循环中调用时显示JS异步结果
- 异步结果——express, mongoose, node, bluebird, Async等等
- NodeJS, mysql和异步结果