我一直在努力寻找最简单的JavaScript承诺(没有库),所以我可以把它放进我的厚脑袋里。我以为我得到了这个概念,但似乎无法工作。有人能解决这个问题吗?
function fetch(message){
return message;
}
var promise = fetch('beep')
promise.then(function(dMessage){
console.log(dMessage);
}).catch(function(err){
console.error('error-', err);
})
错误信息:的承诺。then is not a function
我也有点困惑,什么时候我可以使用这个?NodeJs将能够在没有额外库的情况下使用它,对吗?对于客户端,我应该得到es6承诺?
Solution below with thanks to Daniel B
function fetch(message){
return new Promise(function(resolve, reject){
resolve(message);
});
}
fetch('word').then(function(dMess){
console.log(dMess);
}).catch(function(err){
console.error('error-', err);
})
您正在覆盖本机fetch
函数。只要删除你的函数,它就会工作。
如果你想定义自己的fetch
函数,它必须返回一个promise,如下所示。
function fetch(message){
return Promise.resolve(message);
}
我不相信另一个答案是正确的。虽然它是正确的'fetch'是浏览器原生的方法(不是用户暗示的javascript),但它不是你的承诺不起作用的原因,也不能解释你对承诺的不理解。
链中的第一个promise必须是promise的构造函数/实例。您可以通过多种方式创建这些值,但如果您只有一个简单的值,如字符串,则必须将其包装在Promise.resolve(string)中。Afterwords和链中的其他承诺不需要这个功能,因为它们都被包装在链的顶层承诺中。至少这是大多数实现,比如Q/Bluebird/ES6 Native promises的工作方式。