诺言无法读取未定义的属性

时间:2018-10-05 09:08:53

标签: javascript node.js promise

我创建了一个示例Promise,据我所知,所有变量都已声明且所有方括号均已关闭,但所有内容都已匹配,但我得到的错误无法返回,那么不确定。谁能对此提供解释?感谢您的所有帮助。

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);
  });

2 个答案:

答案 0 :(得分:3)

您需要从Promise返回mySandwich

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);
  });

答案 1 :(得分:0)

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");
    }
  });
}