【发布时间】:2018-08-26 10:33:09
【问题描述】:
我对在 AWS Lambda 函数中使用的 Promise 和异步任务有点困惑。
我已经编写了一个小程序,其中包含我所掌握的知识,它试图对给定的 URL 进行网络抓取。但是,当我使用无效地址运行时,程序挂起而不是返回我的无效请求。当 url 有效时,它会运行而不会失败,尽管我预计不会像预期的那样。
如果有人可以帮助我了解我的错误配置在以下代码中的位置,或者我打算以完全错误的方式承诺,我将不胜感激。
const request = require('request');
const await = require('await');
const async = require('async');
exports.handler = async function(event, context, cb) {
var domain = "https://google.com"
var uri = "/non/existant/path"
var url = `${domain}${uri}`
var webpage = await getWebpage(url)
cb(null, 'success')
}
function getWebpage(url) {
console.log(`Connecting to '${url}'`)
return new Promise(function (resolve, reject) {
request(url, function(error, response, body) {
console.log(response.statusCode)
if (response.statusCode != 200) {
console.log(`ERROR: ${response.statucCode}`);
reject(`See logs for details`);
}
console.log('Connected! Saving contents')
resolve(body);
});
});
}
【问题讨论】:
-
如果你有 Promises,为什么要
cb(null, 'success')? -
the program hangs是什么意思? -
噢,不要这样做
const await = require('await'); const async = require('async');!!这些是关键字,就像function或if!! -
使用
util.promisify将回调fns 转换为promise 和util.callbackify用于另一个方向
标签: javascript node.js asynchronous promise aws-lambda