Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express 快速获取请求承诺_Express_Promise - Fatal编程技术网

Express 快速获取请求承诺

Express 快速获取请求承诺,express,promise,Express,Promise,我将get请求与两个find查询一起使用,但在执行时它是异步的,我需要一个接一个地执行第一个查询,因为我需要使用PROMITE或任何其他方法来解决这个问题?我正在努力做我应该做的事情,一个接一个地执行这段代码。请让我知道如何使用承诺?我是新来表达的 app.get("/cryptonews/:page", function (req, res) { let page=req.params.page; const perpage=10; var pa

我将get请求与两个find查询一起使用,但在执行时它是异步的,我需要一个接一个地执行第一个查询,因为我需要使用PROMITE或任何其他方法来解决这个问题?我正在努力做我应该做的事情,一个接一个地执行这段代码。请让我知道如何使用承诺?我是新来表达的

app.get("/cryptonews/:page", function (req, res) {
        let page=req.params.page;
        const perpage=10;
        var page_name;
        // console.log("lengthtotal",news.length);
        var  length;
         news.find().sort({newsDate: -1}).exec(function (err, news) {
           console.log("1st");
            if (err) {
                console.log(err);
            }
            length=news.length;
            console.log("length2",length);

         });

        news.find()
      .sort({newsDate: -1}).skip((perpage * page) - perpage)
      .limit(perpage).exec(function(err, news){
        console.log("2nd");
           if (err) {
                console.log(err);
            }
            const numOfProducts = length;
console.log("length",numOfProducts)
// news.count({'_id'});
 if(req.session.user != null){

if(req.session.user.address){
            var self =this;
            const smartContrat = self.web3.eth.contract(self.abi).at(contractAddress);
            const balance = smartContrat.balanceOf(req.session.user.address) / 1e18;
            // console.log(balance,"balance")


res.render('cryptonews', {
     sess: req.session,
   news: news, 
    imageurl,
    balance:balance,
   currentPage: page, 
   pages: Math.ceil( numOfProducts  / perpage), 

   numOfResults: numOfProducts ,
    page_name:'news',
  });

}
 else{
         res.render('cryptonews', {
               sess: req.session,
                news: news,
                imageurl,
                 currentPage: page, 
   pages: Math.ceil(numOfProducts / perpage), 

   numOfResults: numOfProducts,
     page_name:'news',


            });
            //  console.log("news",news);
            //  console.log("news",news);
  // console.log("news length",pages);
  // console.log("currentpage:", currentPage)
     }
}

else{
  res.render('cryptonews', {
               sess: req.session,
                news: news,
                imageurl,
                 currentPage: page, 
   pages: Math.ceil(numOfProducts / perpage), 
   numOfResults: numOfProducts,
   page_name:'news',




})

}
      })

当您不向
exec
函数传递任何回调时,您可以在这里使用promise,它将返回一个promise

一旦你得到承诺,你就可以附加它并捕捉它的回调,或者你可以直接使用
wait
关键字来获得承诺的结果

请参考下面的代码

使用
然后
捕获

使用
async
wait


谢谢…..但是为了立即的需要,我创建了一个函数,在其中我有第二个查询,我在第一个查询完成后调用了这个函数。这条路对吗?或者有什么问题请告诉我?没有,不会有任何副作用。您使用的方法是正确的,事实上,这是承诺之前的
旧式javascript
。哈哈……现在我在旧式学校学习,我需要升级,请给我推荐的javascript异步链接,等待并承诺学习如果您对书感兴趣,您可以查看
您不知道javascript
。或者你可以参考
app.get('/cryptonews/:page', function (req, res) {
  const page = req.params.page
  const perpage = 10
  var page_name
  // console.log("lengthtotal",news.length);
  var length
  news.find().sort({ newsDate: -1 }).exec().then(function () {
    console.log('1st')
    length = news.length
    console.log('length2', length)

    news.find()
      .sort({ newsDate: -1 })
      .skip((perpage * page) - perpage)
      .limit(perpage).exec().then(function () {
        console.log('2nd')

        const numOfProducts = length
        console.log('length', numOfProducts)
        // news.count({'_id'});
        if (req.session.user != null) {
          if (req.session.user.address) {
            var self = this
            const smartContrat = self.web3.eth.contract(self.abi).at(contractAddress)
            const balance = smartContrat.balanceOf(req.session.user.address) / 1e18
            // console.log(balance,"balance")

            res.render('cryptonews', {
              sess: req.session,
              news: news,
              imageurl,
              balance: balance,
              currentPage: page,
              pages: Math.ceil(numOfProducts / perpage),
              numOfResults: numOfProducts,
              page_name: 'news'
            })
          } else {
            res.render('cryptonews', {
              sess: req.session,
              news: news,
              imageurl,
              currentPage: page,
              pages: Math.ceil(numOfProducts / perpage),
              numOfResults: numOfProducts,
              page_name: 'news'
            })
            // console.log("news", news);
            //  console.log("news",news);
            // console.log("news length",pages);
            // console.log("currentpage:", currentPage)
          }
        } else {
          res.render('cryptonews', {
            sess: req.session,
            news: news,
            imageurl,
            currentPage: page,
            pages: Math.ceil(numOfProducts / perpage),
            numOfResults: numOfProducts,
            page_name: 'news'
          })
        }
      }).catch(console.log)
  }).catch(console.log)
})
app.get('/cryptonews/:page', async function (req, res) {
  const page = req.params.page
  const perpage = 10
  var page_name
  // console.log("lengthtotal",news.length);

  try {
    var firstQueryResult = await news.find().sort({ newsDate: -1 }).exec()
    console.log('length2', length)

    var secondQueryResult = await news.find()
      .sort({ newsDate: -1 })
      .skip((perpage * page) - perpage)
      .limit(perpage).exec()
  } catch (err) {
    console.log(err)
    throw err
  }

  const numOfProducts = firstQueryResult.length
  console.log('length', numOfProducts)
  // news.count({'_id'});
  if (req.session.user != null) {
    if (req.session.user.address) {
      var self = this
      const smartContrat = self.web3.eth.contract(self.abi).at(contractAddress)
      const balance = smartContrat.balanceOf(req.session.user.address) / 1e18
      // console.log(balance,"balance")

      res.render('cryptonews', {
        sess: req.session,
        news: secondQueryResult,
        imageurl,
        balance: balance,
        currentPage: page,
        pages: Math.ceil(numOfProducts / perpage),
        numOfResults: numOfProducts,
        page_name: 'news'
      })
    } else {
      res.render('cryptonews', {
        sess: req.session,
        news: secondQueryResult,
        imageurl,
        currentPage: page,
        pages: Math.ceil(numOfProducts / perpage),
        numOfResults: numOfProducts,
        page_name: 'news'
      })
      // console.log("news", news);
      //  console.log("news",news);
      // console.log("news length",pages);
      // console.log("currentpage:", currentPage)
    }
  } else {
    res.render('cryptonews', {
      sess: req.session,
      news: secondQueryResult,
      imageurl,
      currentPage: page,
      pages: Math.ceil(numOfProducts / perpage),
      numOfResults: numOfProducts,
      page_name: 'news'
    })
  }
})