javascript - 对于异步测试和钩子,确保调用了“done()”;
问题描述
我有以下有效的代码。
const AWS = require('aws-sdk');
export const handle = someFunction(
event =>
new Promise(resolve => {
const sns = new AWS.SNS({ region: process.env.REGION });
sns
.publish()
.promise()
.then(data => {
resolve({
// some code
});
})
.catch(er => {
resolve({
// some code
});
});
})
);
但是一旦我sns.publish
进入一个单独的函数,我就会收到以下错误。
错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。
const AWS = require('aws-sdk');
export const handle = someFunction(
event =>
new Promise(resolve => {
publishSNS();
})
);
const publishSNS => {
const sns = new AWS.SNS({ region: process.env.REGION });
sns
.publish()
.promise()
.then(data => {
resolve({
// some code
});
})
.catch(er => {
resolve({
// some code
});
});
};
解决方案
resolve
不再在范围内,因此它将在那里抛出错误。没有理由将承诺包装成另一个承诺。
const publishSNS = () => {
const sns = new AWS.SNS({ region: process.env.REGION });
return sns.publish().promise();
};
然后您的其他功能可以处理它:
event => {
return publishSNS()
.then(data => /*handle success here */)
.catch(err => /*handle error here */);
}
推荐阅读
- apache-spark - 出现错误:线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/spark/SparkConf
- android - ES-EC语言的Android错误区域设置
- c - 是否可以将所有这些指针转换为指针数组?
- r - 如何汇总每个特定时间的感染者总数?
- ruby-on-rails - Rails Minitest 系统测试接受对话框
- excel - 在 VBA 中跨多个子项使用字典
- javascript - Laravel - @json 错误 - 预期表达式
- python - 使用python写入文件时“没有这样的文件或目录”
- python - 尝试使用 Seaborn 进行绘图:错误:无效 URL:URL 不能包含控制字符。'/mwaskom/seaborn-data/master/
- c# - Telerik 文档处理库可以与 JavaScript 一起使用吗?