如何让这个javascript承诺工作



我一直在努力寻找最简单的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的工作方式。

最新更新