相关疑难解决方法(0)

什么是Node.js?

我没有完全了解Node.js的全部内容.也许是因为我主要是一个基于Web的业务应用程序开发人员.它是什么以及它的用途是什么?

到目前为止,我的理解是:

  1. 编程模型是事件驱动的,尤其是它处理I/O的方式.
  2. 它使用JavaScript,解析器是V8.
  3. 它可以很容易地用于创建并发服务器应用程序.

我的理解是否正确?如果是,那么即使I/O有什么好处,它对于并发性的东西更多吗?另外,Node.js的方向是成为一个类似于基于JavaScript(V8的)编程模型的框架吗?

javascript v8 evented-io node.js

506
推荐指数
9
解决办法
47万
查看次数

完成所有异步forEach回调后的回调

正如标题所示.我该怎么做呢?

我想whenAllDone()在forEach-loop遍历每个元素并完成一些异步处理之后调用.

[1, 2, 3].forEach(
  function(item, index, array, done) {
     asyncFunction(item, function itemDone() {
       console.log(item + " done");
       done();
     });
  }, function allDone() {
     console.log("All done");
     whenAllDone();
  }
);
Run Code Online (Sandbox Code Playgroud)

有可能让它像这样工作吗?当forEach的第二个参数是一个回调函数,它在经过所有迭代后运行?

预期产量:

3 done
1 done
2 done
All done!
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous callback node.js

221
推荐指数
5
解决办法
25万
查看次数

Array函数的JavaScript运行时复杂性

由JS标准共同定义的运行复杂Array的功能,如push,pop,shift,slicesplice?ESP.我有兴趣在随机位置删除和插入条目.如果未定义复杂性,我可以期待什么,例如在V8中?

(这个问题的灵感来自于此.此外,这个在这里的基准也让我很好奇,但也许这是一些无关的现象.)

(一个非常相关的问题在这里.但是,对接受的答案的评论之一说现在是错误的.另外,接受的答案没有任何参考标准真正定义它的方式.).

javascript arrays time-complexity

39
推荐指数
2
解决办法
2万
查看次数

javascript中的同步和异步循环

JavaScript中的循环是同步还是异步?(for,while等)

假设我有:

for(let i=0; i<10; i++){
    // A (nested stuff...)
}

// B ...
Run Code Online (Sandbox Code Playgroud)

使用for执行B会在A有时开始...(所以异步)

有没有办法以同步方式使用语句?

javascript

19
推荐指数
4
解决办法
3万
查看次数

NodeJs,javascript:.forEach似乎是异步的?需要同步

我目前正在与3个朋友一起使用nodeJs,expressJs,MongoDB,html5进行一个项目......由于我们对这些技术还不熟悉,我们遇到了一些问题.我无法找到解决方案的一个大问题是某些代码的异步执行.

我想要为每个循环完成,以便我有一个更新的在线好友列表,然后执行res.render(我在其中传递在线好友列表),因为当前它在完成循环之前执行res.render .码:

function onlineFriends(req, res) {
var onlinefriends = new Array();
onlinefriends.push("mark");
FriendList.findOne({
    owner: req.session.username
}, function (err, friendlist) {
    friendlist.friends.forEach(function (friend) { // here forEach starts
        OnlineUser.findOne({
            userName: friend
        }, function (err, onlineFriend) {
            if (onlineFriend != null) {
                onlinefriends.push(onlineFriend.userName);
                console.log("a loop");
            }
        });

    });  
        console.log("online friends: " + onlinefriends);
        console.log("redirecting");
        res.render('index', { // this is still inside the forEach function
            friendlist: friendlist.friends,
            onlinefriendlist: onlinefriends,
            username: req.session.username
        });// and here it ends
});
Run Code Online (Sandbox Code Playgroud)

}

输出如下:

online friends: mark …
Run Code Online (Sandbox Code Playgroud)

javascript foreach asynchronous synchronous node.js

14
推荐指数
2
解决办法
2万
查看次数

异步每个vs forEach js

有人可以解释我这两者之间的不同之处:

async.each(items, function (item, callback) {
    // Do something
});
Run Code Online (Sandbox Code Playgroud)

要么 :

items.forEach(function(item) {
 // Do something
)};
Run Code Online (Sandbox Code Playgroud)

javascript async.js

8
推荐指数
1
解决办法
5011
查看次数

所有Node.js回调函数都是异步的吗?

我正在学习Node.js,我在每个教程中都听到的是"Node is asynchronous and noblocking!"

我在普通的浏览器JavaScript中听说过只有某些东西,比如AJAX调用可以异步或非阻塞(使用回调)......这也是Node.js的真实情况,或者所有的Node.js回调函数都是异步的/非阻塞?

javascript asynchronous node.js

7
推荐指数
2
解决办法
3013
查看次数

怎么知道什么时候完成

我对node.js很新,所以我想知道如何知道何时处理所有元素让我们说:

["one", "two", "three"].forEach(function(item){
    processItem(item, function(result){
        console.log(result);
    });
});
Run Code Online (Sandbox Code Playgroud)

...现在,如果我想做一些只能在处理完所有项目时才能完成的事情,我该怎么做?

asynchronous node.js

6
推荐指数
1
解决办法
2281
查看次数

Javascript-完成所有嵌套的forEach循环后的回调

我确定这是一个相当简单的任务,但是目前我无法将其包裹住。我有一组嵌套的forEach循环,并且需要在所有循环完成运行时进行回调。

我愿意使用async.js

这就是我正在使用的:

const scanFiles = function(accounts, cb) {
  let dirs = ['pending', 'done', 'failed'];
  let jobs = [];

  accounts.forEach(function(account) {
    dirs.forEach(function(dir) {
      fs.readdir(account + '/' + dir, function(err, files) {
         files.forEach(function(file) {
            //do something
            //add file to jobs array
            jobs.push(file);
         });
      });
    });
  });

  //return jobs array once all files have been added
  cb(jobs);
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js async.js

3
推荐指数
1
解决办法
4771
查看次数

从Firebase读完后返回数组

我想将满足特定条件的所有值推送到数组然后返回此数组.这是我的代码

exports.getNearbyPosts = function (myLat, myLng){
  var query = firebase.database().ref("posts/").orderByKey();
  var listOfItems = [];
  query.once("value")
    .then(function(snapshot) {
      snapshot.forEach(function(childSnapshot) {
        var key = childSnapshot.key;
        var childData = childSnapshot.val();
        var dist = getDistanceBetweenCoord(childData.lat, childData.lng, myLat, myLng);
        if(dist < 10239820938502){
          listOfItems.push(childSnapshot);
        }
    });
  });

  return listOfItems;
}
Run Code Online (Sandbox Code Playgroud)

但是因为forEach是异步的,而且好像我不能在forEach上使用回调,所以我返回的listOfItems只是一个空数组.我也试过".then",但它只允许我在".then"中做更多的东西,我想把这个数组作为变量返回到代码的其他部分.在执行forEach后如何返回正确的数组?

javascript asynchronous firebase firebase-realtime-database

2
推荐指数
1
解决办法
1303
查看次数

Array.forEach是异步的吗?

根据JavaScript,Node.js:Array.forEach是异步的吗?,Array.forEach是同步的。但是,对于下面的代码:

function wait5() {
    return new Promise(resolve => 
    setTimeout(resolve, 5000));
}

async function main() {
   console.log("Start");
   [1,2].forEach(async (e) => {
      const d = await wait5().then(()=> console.log("5s later") )
   })
   console.log("This should come last!");
}

main();
Run Code Online (Sandbox Code Playgroud)

输出为:

Start
This should come last!
5s later
5s later
Run Code Online (Sandbox Code Playgroud)

两个“ 5s之后”迅速相继问世。

为什么会这样呢?

如果我使用普通for循环:

async function main() {
   console.log("Start");
   for (let i=0;i<2;i++) {
      const d = await wait5().then(()=> console.log("5s later") )
   }
   console.log("This should come last!");
}
Run Code Online (Sandbox Code Playgroud)

那么结果就是我想要的:

Start
5s later …
Run Code Online (Sandbox Code Playgroud)

javascript

2
推荐指数
1
解决办法
3104
查看次数