返回内部还是外部的?

时间:2019-05-13 01:07:01

标签: javascript node.js

我在这里迷失了方向。我正在尝试使用需要在帖子正文中使用的参数来进行发布请求。 该对象只有一个属性步骤。 我使用for来做到这一点,在每次迭代中,我都会将一个对象作为参数发送。

问题是,如果我将return放在for中,工作!但是将其发送给我的第一个对象后,它的完成对我来说不起作用。 如果我将返回值放在for之外,则会抛出此错误:将圆形结构转换为json

帮助! ks!

代码在这里: app.js

const express = require('express')
const bodyParser = require('body-parser')
const itemsController = require('../controller/itemsController')
const saveController = require('../controller/saveController')

const app = express()

.use(bodyParser.urlencoded({extended : true}))
.use(bodyParser.json())


.get('/api/v1/items', itemsController.getItems)

.get('/api/v1/save', saveController.postItems)

.use(function(error, req, res, next){
    console.log('error', error)
})

module.exports = app

controller.js

function postItems(req, res, next){
    eventService.getItems()
    .then(response => {
     const eventType = response.items.filter(type => type.type == 'LIVE')

        for(var i =  10; i < eventType.length; i++){ 
              const res = eventService.postItems(nameFilter[i])
              // return eventService.postItems(nameFilter[i])
        } 
        return res    
    })
   .then(response => {
        res.send(response)
    }) 
    .catch(error => {
        console.log('error')
        next(error)
    }) 
}

服务:

async postItems(param) {

    try {
      const response = await axios({
        method: "POST",
        headers: {
          'Content-Type': 'application/json',
          'Authorization': await getToken.getToken()
        },
        url: 'url',
        data: param
      })
      return response.data

    } catch (error) {
      console.log( error)
    }
  }
}

1 个答案:

答案 0 :(得分:-1)

无论放在哪里,它都只会返回一个值。您可以尝试将Promise.all与生成器(尚未测试!)

function postItems(req, res, next){
    eventService.getItems()
    .then(response => Promise.all(function*(){
        const eventType = response.items.filter(type => type.type == 'LIVE')

        for(var i = 10; i < eventType.length; i++){
              const res = eventService.postItems(nameFilter[i]))
              yield res
        }
    }()))
    .then(responses => {
        Promise.all(responses.map(response => res.send(response)))
    })
    .catch(error => {
        console.log('error')
        next(error)
    })
}