首页 > 解决方案 > 无法读取未定义节点的属性“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);
}) 

帮助我理解我的错误。

标签: javascriptnode.js

解决方案


对您的代码最简单的修复是

  1. 修正第一行的语法
  2. 在该函数中返回一些东西,在这种情况下是 Promise
  3. somePackagePromiseFunc一个函数?然后调用它
  4. 修复 .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);

注意,没有“新”,因为它也不是构造函数


推荐阅读