Почему возврат выполняется до создания элемента, а console.log ожидает и показывает правильный идентификатор? - PullRequest
1 голос
/ 20 февраля 2020

Я использую node.js, express и pnp (sharepoint) для вставки элемента списка, проблема в том, что идентификатор, возвращаемый в console.log, правильный, но когда я пытаюсь отправить обратно идентификатор, его созданный идет пустым. как получается, что console.log ожидает код, а возвращение - нет?

вот мой код:

app.use(express.json());

//Método inserir emergencia
app.post('/inserirEmergencia', function(req, res){
    var retorno = inserirEmergencia(req);
    return res.json(retorno);
});

app.listen(3001);

async function inserirEmergencia(req) {

var retornoItemAdd;

const listAdd = await sp.web.lists.getByTitle("Emergências").items.add({
        Descricao: req.body.Descricao,
        NomeId: req.body.NomeId,
        DataEmergencia: req.body.DataEmergencia,
        TipoEmergenciaId: req.body.TipoEmergenciaId,
        SubtipoEmergenciaId: req.body.SubtipoEmergenciaId,
        Email: req.body.Email,
        Telefone: req.body.Telefone,
        LocalSetorEndereco: req.body.LocalSetorEndereco,
        Estado: req.body.Estado,
        Municipio: req.body.Municipio
    }).then((iar) => {
            console.log(iar); //waits for the creation
            return iar; //executes without waiting

    }).catch((err) => {
            retornoItemAdd = err;
            console.log(err);
            return err;
        });
  }

Я обновляю код до:

так что, спасибо для ответа я отредактировал и удалил тогда .. но все еще то же самое происходит ..

async function inserirEmergencia(req) {

    const listAdd = await sp.web.lists.getByTitle("Emergências").items.add({
        Descricao: req.body.Descricao,
        NomeId: req.body.NomeId,
        DataEmergencia: req.body.DataEmergencia,
        TipoEmergenciaId: req.body.TipoEmergenciaId,
        SubtipoEmergenciaId: req.body.SubtipoEmergenciaId,
        Email: req.body.Email,
        Telefone: req.body.Telefone,
        LocalSetorEndereco: req.body.LocalSetorEndereco,
        Estado: req.body.Estado,
        Municipio: req.body.Municipio
    });

    console.log(listAdd);
    return listAdd;

}

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

Вы должны удалить вызов функции then и изменить свой подход и оставить только await операторов.

app.use(express.json());

//Método inserir emergencia
app.post('/inserirEmergencia', async function(req, res) {
  try {
    var retorno = await inserirEmergencia(req);
    return res.json(retorno);
  } catch (e) {
    //Error handling
  }
});

app.listen(3001);

async function inserirEmergencia(req) {
  const listAdd = await sp.web.lists.getByTitle("Emergências").items.add({
    Descricao: req.body.Descricao,
    NomeId: req.body.NomeId,
    DataEmergencia: req.body.DataEmergencia,
    TipoEmergenciaId: req.body.TipoEmergenciaId,
    SubtipoEmergenciaId: req.body.SubtipoEmergenciaId,
    Email: req.body.Email,
    Telefone: req.body.Telefone,
    LocalSetorEndereco: req.body.LocalSetorEndereco,
    Estado: req.body.Estado,
    Municipio: req.body.Municipio
  });

  return listAdd;
}
0 голосов
/ 21 февраля 2020

попробуйте так:

//Método inserir emergencia
app.post('/inserirEmergencia', function(req, res){
  let retorno = inserirEmergencia(req).then(
    iar => {
      console.log(iar);
      res.json(iar);
    }
  );  
});
0 голосов
/ 21 февраля 2020

Наконец, код работает.

выглядит так ..

//Método inserir emergencia
app.post('/inserirEmergencia', function(req, res){
    let retorno = inserirEmergencia(req).then(
      iar => {
        console.log(iar);
        res.json(iar);
      }
    );  
  });

app.listen(3001);

async function inserirEmergencia(req) {

    const listAdd = await sp.web.lists.getByTitle("Emergências").items.add({
        Descricao: req.body.Descricao,
        NomeId: req.body.NomeId,
        DataEmergencia: req.body.DataEmergencia,
        TipoEmergenciaId: req.body.TipoEmergenciaId,
        SubtipoEmergenciaId: req.body.SubtipoEmergenciaId,
        Email: req.body.Email,
        Telefone: req.body.Telefone,
        LocalSetorEndereco: req.body.LocalSetorEndereco,
        Estado: req.body.Estado,
        Municipio: req.body.Municipio
    });

    console.log(listAdd);
    return listAdd;

}
...