javascript - 无法读取未定义节点的属性“then”
问题描述
请原谅我问了这样一个初学者级别的问题,因为我对标题相同的问题的答案不满意。基本上,在执行一些也返回承诺的包函数后,我的函数需要一个承诺返回类型。
myquest.js
module.exports = somefunction = (data){
//performs some processing with data
somePackagePromiseFunc() //return type promise
.then((data) => {
console.log(data);
return new Promise.resolve(data);
}).catch( (err) => {
console.log(err);
return new Promise.reject(err);
});
}
mymain.js
var somefunction = require('myquest');
somefunction(data).then((data) => {
console.log('job done with data ' + data);
}).catch(() => {
console.log('we messed with error: ' + err);
})
帮助我理解我的错误。
解决方案
对您的代码最简单的修复是
- 修正第一行的语法
- 在该函数中返回一些东西,在这种情况下是 Promise
- 是
somePackagePromiseFunc
一个函数?然后调用它 - 修复 .then/.catch 中的返回值
你最终会得到
module.exports = function (data) {
//performs some processing with data
return somePackagePromiseFunc().then((data) => {
console.log(data);
return data;
}).catch( (err) => {
console.log(err);
throw err;
});
}
请注意您的一些代码:
return new Promise.resolve(data);
Promise.resolve 不是构造函数,因此 removenew
将使它
return Promise.resolve(data);
但是,您在 .then 中,无论您返回什么都是一个 Promise,它解析 .then 中返回的值 - 所以,根本不需要将它包装在 Promise.resolve 中 - 这就是为什么您只需要
return data;
同样对于 .catch,除了返回一个被拒绝的承诺,你throw
而不是return
- 虽然技术上你可以
return Promise.reject(err);
注意,没有“新”,因为它也不是构造函数
推荐阅读
- swift - 如何区分我的类型与模块类型
- python-3.x - Remove rows in a 2d numpy array with opposite elements
- python - 计算素数的数量直到给定数量
- javascript - 动画原生延迟加载图像(loading='“lazy”)
- java - 如何使用 Spring 提供的 Kafka api 在消费组中创建多个消费者
- excel - Excel - 有 BUT 函数吗?
- c# - 在同一区域显示其他 MDI 表单之前,如何确保 DataGridView 完全不可见?
- c - 与 for 循环递增规则混淆
- gcc - mpSoC 的编译器
- for-loop - 在 Xamarin 中使用 for 循环语句更改图像