我一直在努力寻找最简单的JavaScript承诺(没有库),所以我可以把它放进我厚厚的头骨中。以为我得到的概念,但似乎无法工作。谁能解决这个问题?
function fetch(message){
return message;
}
var promise = fetch('beep')
promise.then(function(dMessage){
console.log(dMessage);
}).catch(function(err){
console.error('error-', err);
})
错误消息: promise.then不是函数
当我可以使用它时,我也有点困惑? NodeJs能够在没有额外库的情况下使用它吗?对于客户端我应该得到ES6承诺吗?
感谢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);
})
答案 0 :(得分:2)
您正在覆盖本机fetch
功能。只需删除您的功能,它就会起作用。
如果您想定义自己的fetch
函数,则必须返回一个承诺,如下所示。
function fetch(message){
return Promise.resolve(message);
}
答案 1 :(得分:1)
我不相信其他答案是正确的。虽然在获取'中它是正确的。是一种原生于浏览器的方法(不是用户所暗示的javascript),这不是你的承诺不起作用的原因,也不能解释你对承诺的理解。
第一个承诺'在一个链中总是必须是一个promise构造函数/实例。您可以通过多种方式创建它们,但如果您只有像字符串这样的简单值,则必须将其包装在Promise.resolve(string)中。后记以及链中的其他承诺不再需要此功能,因为它们都包含在链的顶级承诺中。至少这是大多数像Q / Bluebird / ES6 Native promises这样的实现都会起作用的方式。