使用节点js的回调函数和普通函数之间的区别

时间:2019-05-07 12:27:26

标签: node.js nodejs-stream nodejs-server

我在节点js中实现回调函数。但是我对回调函数有疑问。我在节点js中尝试了两个函数,一个回调函数和另一个普通函数。两个函数都试图运行其给定的相同结果。我没有任何人解释我的代码。

callback_function.js

const MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectID

// Connection URL
var db =" "

MongoClient.connect('mongodb://localhost:27017', (err, client) => {
  // Client returned
  db = client.db('olc_prod_db');

  gener(function(id)
{
    db.collection('Ecommerce').find({ _id: new ObjectId(id) }, function(err,result)
    {
        console.log("hello")
    })
})


function gener(callback)
{
    db.collection('Ecommerce').find({}).toArray(function(err,result)
    {
        console.log("hai")
    })
    callback("5ccac2fd247af0218cfca5dd")
}
});

normal_function.js

const MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectID

// Connection URL
var db =" "

MongoClient.connect('mongodb://localhost:27017', (err, client) => {
  // Client returned
  db = client.db('olc_prod_db');

  gener()


  function data()
  {
      console.log("hello")
  }


function gener()
{
    db.collection('Ecommerce').find({}).toArray(function(err,result)
    {
        console.log("hai")
    })
    data()
}
});

它同时显示结果hello和hai

1 个答案:

答案 0 :(得分:1)

如果您调用相同的函数,结果将是相同的。

这不是正确的回调。

  

回调是函数的异步等效项。回调   函数在给定任务完成时被调用。节点变重   使用回调。 Node的所有API的编写方式都使得   他们支持回调。

在您的情况下,您正在同步执行事务。 您只能在另一个函数的参数中使用其指针来调用函数。

示例1

function gener(callback)
{  
    console.log("hai")
    callback("5ccac2fd247af0218cfca5dd")
}

gener(function(id)
{   
        console.log("hello")
})

Example2

gener()

function data()
{
    console.log("hello")
}

function gener()
{
    console.log("hai")
    data()
}