我尝试在其中一个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);
答案 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的一部分(非常非常新)...
答案 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
只是一个函数