gpt4 book ai didi

node.js - 访问 Node js中函数外部的数组

转载 作者:搜寻专家 更新时间:2023-11-01 00:02:38 25 4
gpt4 key购买 nike

我知道 node.js 是异步运行的,所以外部函数比内部函数执行得早。但是在for循环外访问notification数组的方法是什么?我想一次访问数组中的所有值,这可行吗?

var notification=[];

for(var j=0;j<6; j++)
{
getNotification(response[j].sender_id,function(results) // a function called
{
notification[j] =results;
console.log(notification); // output: correct
});
}
console.log(notification); // output: [], need notification array values here

最佳答案

编辑:如果您不想使用第三方库,这就是在您自己的代码中执行此操作的方法。

/* jshint node:true*/


function getNotifications(responses, callbackToMainProgramLogic) {
'use strict';
var results = [];

function getNotificationAsync(response) {
getNotification(response.sender_id, function (data) {
results.push(data);

if (responses.length) {
getNotificationAsync(responses.pop());//If there are still responses, launch another async getNotification.
} else {
callbackToMainProgramLogic(results);//IF there aren't we're done, and we return to main program flow
}
});
}

getNotificationAsync(responses.pop());
}

getNotifications(someArrayOfResonses, function (dataFromNotifications) {
console.log('The collected data: ' + JSON.stringify(dataFromNotifications, 0, 4));
});

如果你绝对必须,你可以做这样荒谬的事情。您在 loopUntilDatReceived 中的逻辑将等待数组大小,而不是等待非空字符串,但想法是相似的,无论如何您都不应该使用它! :)

var fileData = '';
fs.readFile('blah.js', function (err, data) { //Async operation, similar to your issue.
'use strict';
fileData = data;
console.log('The Data: ' + data);
});

function loopUntilDataReceived() {
'use strict';
process.nextTick(function () {//A straight while loop would block the event loop, so we do this once per loop around the event loop.
if (fileData === '') {
console.log('No Data Yet');
loopUntilDataReceived();
} else {
console.log('Finally: ' + fileData);
}
});
}

loopUntilDataReceived();

我说过这很荒谬吗?老实说,这是一个糟糕的想法,但它可以帮助您了解正在发生的事情以及 Node 事件循环的工作原理,以及为什么您想要的东西不可能实现。以及为什么其他关于回调和流程控制库的帖子是可行的。

关于node.js - 访问 Node js中函数外部的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18017454/

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