【问题标题】:promises cannot read property then of undefined承诺无法读取未定义的属性
【发布时间】:2019-03-10 18:05:33
【问题描述】:

我已经创建了一个示例承诺,据我所知,所有变量都已声明并且所有括号都已关闭,但我得到了无法返回未定义的错误。任何人都可以对此提供解释吗?感谢您的所有帮助。

function mySandwich(data) {
  new Promise(function(resolve, reject) {
    if (data > 5) {
      resolve(data);
    } else {
      reject('no data');
    }
  });
}

mySandwich(5)
  .then(function(data) {
    console.log('promise 1 num is' + data);
  })
  .catch(function(err) {
    console.log(err);
  });

【问题讨论】:

  • 你没有返回mySandwich中的承诺
  • 好的,谢谢你说得通

标签: javascript node.js promise


【解决方案1】:

你需要从mySandwich返回Promise

function mySandwich(data) {
    return new Promise(function (resolve, reject) {
        if (data > 5) {
            resolve(data);
        } else {
            reject("no data");
        }
    });
}

mySandwich(5)
    .then(function (data) {
        console.log("promise 1 num is" + data);
    })
    .catch(function (err) {
        console.log(err);
    });

function mySandwich(data) {
  return new Promise(function (resolve, reject) {
    if (data > 5) {
      resolve(data);
    } else {
      reject("no data");
    }
  });
}

mySandwich(5)
  .then(function (data) {
    console.log("promise 1 num is" + data);
  })
  .catch(function (err) {
    console.log(err);
  });

【讨论】:

  • 您可以将此问题作为错字关闭
  • @AnkitAgarwal 我不会因为错字而关闭。它更像是一个逻辑错误。作为一个骗子关闭会更有意义,因为它是一个常见的承诺错误..
【解决方案2】:

mySandwich 是一个函数,不返回任何内容。根据您的代码

mySandwich(5)
 .then(function (data) {
  console.log("promise 1 num is" + data);
})
.catch(function (err) {
console.log(err);
});

它期望从函数返回一个承诺。这就是为什么您收到此错误无法返回未定义的原因。 你只需要添加一个返回到 mySandwhich。

function mySandwich(data) {
   return new Promise(function (resolve, reject) {
    if (data > 5) {
        resolve(data);
    } else {
        reject("no data");
    }
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2019-05-16
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2017-01-23
    相关资源
    最近更新 更多