gpt4 book ai didi

node.js - 在 NodeJS 中 For 之后进行回调的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:38 25 4
gpt4 key购买 nike

我已经使用 PHP 进行开发多年,现在我正在尝试学习 NodeJS,但我在异步函数方面遇到了问题......

我在 NodeJS 中有这个函数(源是用户数组):

//userformat.js

var age = module.exports.age = function(date){

var diff = new Date - new Date(date);
var diffdays = diff / 1000 / (60 * 60 * 24);
var age = Math.floor(diffdays / 365.25);

return age;

}

...etc.

//index.js

function format(source, me, callback){

var len = source.length

for (var i = 0; i < len; i++){

source[i]['_age'] = userFormat.age(source[i]['birthday']);
source[i]['_rating'] = userFormat.rating(source[i]['votes']);
source[i]['_is_followed'] = userFormat.followed(source[i]['fllws'], me);

}

callback(null, source);

}

我知道 Node 中的函数是错误,因为函数有可能在 for() 中的函数完成之前调用回调,并且数组中的值可能未定义,因此我使用回调更改了函数:

//userformat.js

var age = module.exports.age = function(date, callback){

var diff = new Date - new Date(date);
var diffdays = diff / 1000 / (60 * 60 * 24);
var age = Math.floor(diffdays / 365.25);

callback(age);

}
...etc.

//index.js

function format(source, me, callback){

var len = source.length

for (var i = 0; i < len; i++){

userFormat.age(source[i]['birthday'], function(resul){

source[i]['_age'] = resul;

userFormat.rating(source[i]['votes'], function(resul){

source[i]['_rating'] = resul;

userFormat.followed(source[i]['fllws'], me, function(resul){

source[i]['_is_followed'] = resul;

//Callback
if (i == len-1){
callback(null, source);
}

})

})


})

}

}

这是正确的吗?我有另一种方法可以更高效或更优雅吗?

非常感谢!

最佳答案

我认为你误解了nodeJS中异步的概念。您的代码不是异步的,您的回调将始终在循环之后调用。

检查这个问题:how do i create a non-blocking asynchronous function in node.js?

关于node.js - 在 NodeJS 中 For 之后进行回调的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com