那么为什么不在这个功能上工作呢

时间:2017-06-24 09:59:10

标签: javascript

我尝试在其中一个promise实现中测试MDN中给出的示例。它给我的错误如下。

错误

Uncaught TypeError: doSomething(...).then is not a function
    at promise.js:16

JS档案

function successCallback(result) {
    console.log("Success" + result);
}

function failCallback(fail) {
    console.log('fail' + fail);
}

function doSomething(successCallback, failCallback) {
    return "Yello";
};

doSomething(successCallback, failCallback);


doSomething().then(successCallback,failCallback);

5 个答案:

答案 0 :(得分:3)

使用 async 更简单:

async function doSomething() {
  return "Yello";
};

doSomething().then(console.log);//Yello

要启用错误处理,只需抛出错误:

async function isMultiple(a,b) {
   if(a%b===0){
      return true;//success
   }
      throw "not a multiple";
};

isMultiple(5,2).then(console.log).catch(console.log);//not a multiple in catch

请注意,异步功能是ES7的一部分(非常非常新)...

babeled code

答案 1 :(得分:2)

您必须返回一个承诺,resolves如果成功,则rejects如果出现错误then



function successCallback(result) {
  console.log("Success" + result);
}

function failCallback(fail) {
  console.log('fail' + fail);
}


function doSomething(successCallback, failCallback) {
  return new Promise( (resolve, reject) => {
      resolve('Yello!');
      // or
      // reject ("Error!");
  });
}

doSomething().then(successCallback, failCallback);




答案 2 :(得分:2)

在您的示例中,您没有使用Promise。要使用一个,你必须这样做:

function successCallback(result) {
    console.log("Success" + result);
}

function failCallback(fail) {
    console.log('fail' + fail);
}

function doSomething() {
    return new Promise(function(resolve,reject) {
        console.log("Yello");
        resolve();
    });
}


doSomething().then(successCallback,failCallback);

此处,永远不会执行failCallback

答案 3 :(得分:1)

您的doSomething函数必须返回Promise。 例如:

return Promise.resolve('Hello');

答案 4 :(得分:0)

doSomething对象没有then函数,doSomething只是一个函数