使用Azure Visual Studio代码扩展时,Azure Functions NodeJS:Https请求不起作用

时间:2019-06-05 14:47:40

标签: node.js azure azure-functions

我正在使用NodeJS中的Azure函数。我首先在笔记本电脑上本地编写了具有天蓝色功能的函数。该代码工作正常,可以完成我想要的一切。现在,我将代码添加到我的Azure Visual Studio代码扩展中的新的Azure函数中-完全相同的代码。但是现在它不再起作用了。我没有收到任何错误,https请求没有启动。

这是我的代码:

const https = require('https');
const fs = require('fs');
const storage = require('azure-storage');
const STORAGE_ACCOUNT_NAME = 'SOMETHING';
const ACCOUNT_ACCESS_KEY = 'SOMETHING';

const blobService = storage.createBlobService(STORAGE_ACCOUNT_NAME, ACCOUNT_ACCESS_KEY);

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    let _browser;
    let _page;


    https.get(SOMEURL", (resp) => {
        let data = '';

        // A chunk of data has been recieved.
        resp.on('data', (chunk) => {
            data += chunk;
        });

        // The whole response has been received. Print out the result.
        resp.on('end', async () => {
            context.log('here');
        });

    }).on("error", (err) => {
        console.log("Error: " + err.message);
    });

};

它从不打印应该在https请求结束后执行的“这里”。 (但是,两种情况下都会打印出第一个context.log)

所以我的问题是,我在做什么错?使用Visual Studio代码扩展时,我可以在azure函数中不使用https请求吗?

编辑:

任何需要异步的人,以下是一个链接,该链接说明了如何使用util.promisify:https://gist.github.com/krnlde/797e5e0a6f12cc9bd563123756fc101f

1 个答案:

答案 0 :(得分:1)

我一直基于您的代码回调。 我从定义中删除了predict()这个绰号,并在您的shape(1, 5, 1)处理程序中添加了对predict_on_batch()的调用(这表示函数结束时通知函数主机)

async

另一种选择是将函数保留为context.done,但您需要使用基于resp.end的调用来代替回调。在某些情况下,可以通过使用util.promisify包装它们,然后使用const https = require('https'); const fs = require('fs'); const storage = require('azure-storage'); const STORAGE_ACCOUNT_NAME = 'SOMETHING'; const ACCOUNT_ACCESS_KEY = 'SOMETHING'; const blobService = storage.createBlobService(STORAGE_ACCOUNT_NAME, ACCOUNT_ACCESS_KEY); module.exports = function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); let _browser; let _page; https.get(SOMEURL", (resp) => { let data = ''; // A chunk of data has been recieved. resp.on('data', (chunk) => { data += chunk; }); // The whole response has been received. Print out the result. resp.on('end', async () => { context.log('here'); context.done(); }); }).on("error", (err) => { console.log("Error: " + err.message); }); }; 关键字

来实现。