为什么我在新的Promise创建块中看到了返回值

时间:2017-11-03 01:56:16

标签: javascript

我对2之间的区别(如果有的话)和用例感到困惑。为什么有人会返回一个值?



var p1 = new Promise((resolve, reject) => { 
   return setTimeout(() => {
      resolve('Success')
   }, 2000);
});

p1.then((successVal) => console.log(successVal))
.catch((error) => console.log(error))
                 






var p1 = new Promise((resolve, reject) => { 
   setTimeout(() => {
      resolve('Success')
   }, 2000);
});

p1.then((successVal) => console.log(successVal))
.catch((error) => console.log(error))
                 




编辑:包含以下代码,这是我实际看到的内容。

someFunc = (params) => {
        if (!params) {
            throw new Error('Invalid params');
        }
        return new Promise((resolve, reject) => {
            return someOtherFunc(params, result => { // why return here? Does it matter? 
                resolve(result);
            }, (code, message, error) => {
                reject(error);
            });
        });
    };

根据我的理解,someFunc是一个返回Promise的函数,该函数稍后会被someOtherFunc解析。为什么someOtherFunc的返回值很重要?因为它的工作是调用resolvereject处理程序?

3 个答案:

答案 0 :(得分:3)

没有实际差异。传递给Promise的箭头函数称为executor,它返回的值将被忽略。 resolvereject中返回的值是重要的值。

答案 1 :(得分:1)

  

根据我的理解,someFunc是一个将返回a的函数   Promise

不一定是更新的问题中的代码,如果Promise条件评估为if且投放true,则不会返回Error()



const someFunc = (params) => {
  if (!params) {
    throw new Error('Invalid params');
  }
  return new Promise((resolve, reject) => {
    resolve(123)
  });
};

someFunc()
.then(data => console.log(data)
// what happened to our error handling?
, err => console.error("err:", err.message));




if条件应在Promise执行函数范围内,错误可能会传递给reject(),第二个参数为.then() et或.catch()处理可能的错误



const someFunc = (params) => {
  return new Promise((resolve, reject) => {
    if (!params) {
      throw new Error('Invalid params');
    }
    resolve(123);
  });
};

someFunc()
.then(data => console.log(data)
// handle error thrown within `Promise` constructor
, err => console.error("err:", err.message));




答案 2 :(得分:0)

如果要在变量中实例化新的Promise,则没有理由返回。你想要返回一些东西的唯一原因是在一个函数内。您将使用return返回附加到该函数的返回值。