Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js 在结束()之前等待函数_Node.js - Fatal编程技术网

Node.js 在结束()之前等待函数

Node.js 在结束()之前等待函数,node.js,Node.js,编辑:添加了更多的代码 const express = require('express'); var bodyParser = require('body-parser'); const app = express(); var urlencodedParser = bodyParser.urlencoded({extended: false}) const {google} = require('googleapis'); const {P

编辑:添加了更多的代码

    const express = require('express');
    var bodyParser = require('body-parser');
    const app = express();

    var urlencodedParser = bodyParser.urlencoded({extended: false})

    const {google} = require('googleapis');
    const {PubSub} = require('@google-cloud/pubsub');
    const iot = require('@google-cloud/iot');
    const API_VERSION = 'v1';

    const DISCOVERY_API = 'https://cloudiot.googleapis.com/$discovery/rest';
    app.get('/', urlencodedParser, (req, res) => {

    const projectId = req.query.proyecto;
    const cloudRegion = req.query.region;
    const registryId = req.query.registro;
    const numSerie = req.query.numSerie;
    const command = req.query.command;

    const client = new iot.v1.DeviceManagerClient();
    if (client === undefined) {
        console.log('Did not instantiate client.');
    } else {
        console.log('Did instantiate client.');
        sendCom();
    }

    async function sendCom() {
        const formattedName = await client.devicePath(projectId, cloudRegion, registryId, numSerie)
        const binaryData = Buffer.from(command);
        const request = {
            name: formattedName,
            binaryData: binaryData,
        };
        return client.sendCommandToDevice(request).then(responses => res.status(200).send(JSON.stringify({
            data: OK
        }))).catch(err => res.status(404).send('Could not send command. Is the device connected?'));
    }
});

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
    console.log(`App listening on port ${PORT}`);
    console.log('Press Ctrl+C to quit.');
});

module.exports = app;
我有一个函数,在客户端启动后调用:sendCom()

我的问题是sendCommandToDevice执行得很好,但是我得到了捕获错误。 据我所知,这是因为在中,结束了连接


我已经看过了,这就是我尝试过的,但是我不确定我是否理解发生了什么。

您不能将
发送
结束
一起使用

  • end()
    在您希望结束请求并希望在没有数据的情况下响应时使用

  • send()
    用于结束请求并使用一些数据进行响应


您可以找到有关它的更多信息。

您不能将
send
end
一起使用

  • end()
    在您希望结束请求并希望在没有数据的情况下响应时使用

  • send()
    用于结束请求并使用一些数据进行响应


您可以找到有关它的更多信息。

您正在使用
res.status…
,而您的lambda会得到
响应。
res
从哪里来?@OmriAttiya它的应用程序中。get('/',urlencodedParser,(req,res)=>{}我上面发布的所有代码都在这里。@Farrukh是的,正如我说的,我认为这是问题所在。但是我不确定我应该在哪里或如何使用.end()它?在这种情况下,你不需要调用.end()因为你没有缓冲区来发送回复,加上@OmriAttiya关于res.status的说法是正确的,应该是responses.status…@Farrukh如果有帮助的话,我已经用一个更全面的代码更新了帖子。我已经改成了你和OmriAttiya所说的。仍然没有成功。你正在使用
res.status…
而你的lambda得到
响应
res
从何而来?@OmriAttiya它的应用程序中。get('/',urlencodedParser,(req,res)=>{}我上面发布的所有代码都在这里。@Farrukh是的,正如我所说的,我认为这是问题所在。但我不确定我应该在哪里或如何使用.end()它?在这种情况下,你不需要调用.end()因为你没有缓冲区来发送回复,加上@OmriAttiya关于res.status的说法是正确的,应该是responses.status…@Farrukh如果有帮助的话,我已经用一个更全面的代码更新了帖子。我已经改成了你和OmriAttiya所说的。仍然没有成功。谢谢。我删除了.end()但是,我面临同样的问题。即使尝试成功并且sendCommandToDevice有效,我仍然可以作为代表使用捕获。谢谢。我删除了.end(),但是我面临同样的问题。即使尝试成功并且sendCommandToDevice有效,我仍然可以作为代表使用捕获。
     async function sendCom() {
        const formattedName = await client.devicePath(projectId, cloudRegion, registryId, deviceId)
        const binaryData = Buffer.from(command);            
        const request = { name: formattedName, binaryData: binaryData, };

        client.sendCommandToDevice(request)
        .then(responses => {
            res.status(200).send(JSON.stringify({ data: OK })).end();                
        })
        .catch(err => {
            res.status(404).send('Could not send command. Is the device connected?').end();             
        });
    }