JavaScript中嵌套在dataService的Promise函数使用报错求助
解决Promise调用的两个常见报错
看起来你这两个报错都是Promise使用的基础问题,我来帮你拆解并修复:
错误原因分析
Cannot read property 'then' of undefined:这个报错说明你的getData方法没有返回创建的Promise实例。当你调用dataService.getData().then(...)时,getData()返回了undefined,而undefined自然没有then方法。Cannot read property 'resolve' of undefined:这个问题大概率是你在Promise的回调函数里错误地使用了this.resolve()。实际上Promise构造函数的回调会直接传入resolve和reject两个函数,你直接调用这两个参数即可,不需要通过this访问——而且普通函数作为回调时,this的指向也不是Promise实例,所以会找不到resolve属性。
修复后的完整代码
// 正确实现的dataService const dataService = { getData() { // 关键:必须返回Promise实例 return new Promise((resolve, reject) => { // 生成1到10的随机数 const randomNumber = Math.floor(Math.random() * 10) + 1; console.log(`生成的随机数:${randomNumber}`); if (randomNumber > 5) { // 直接使用构造函数传入的resolve函数 resolve(`成功!随机数 ${randomNumber} 大于5`); } else { // 直接使用构造函数传入的reject函数 reject(`失败!随机数 ${randomNumber} 小于等于5`); } }); } }; // 正确调用方式 dataService.getData() .then(successMsg => { console.log(successMsg); }) .catch(errorMsg => { console.error(errorMsg); });
核心修复点说明
- 必须返回Promise:
getData方法里一定要用return把创建的Promise实例返回出去,这样调用者才能拿到Promise并使用then/catch方法。 - 直接使用resolve/reject参数:Promise构造函数的第一个参数是一个回调函数,它会被自动传入
resolve和reject两个函数,你直接调用这两个参数就行,别画蛇添足加this。
内容的提问来源于stack exchange,提问作者java_jazz
相关产品推荐
相关产品推荐

