Promise.resolve()和resolve()之间的区别?

道伊

我写了下面的代码:

function readFile(path) {
    return new Promise(function(resolve, reject){
        if(!fs.existsSync(path))
            return reject(new Error("data.json file does not exist"));
        else {
            console.log("File is actually found!");
            return Promise.resolve("File found");
        }
    })
}

readFile(path)
    .then(value => {
        console.log(value);
    })
    .catch(err => {
        console.log(err);
    })

发生的情况:
如果该文件存在,则控制台输出仅为:File is actually found!如果该文件不存在,则显示:data.json file does not exist和错误堆栈。

我想要的:
当文件确实存在时,File found除了,我还想显示File is actually found!我发现当我return Promise.resolve("File found");用justresolve("File found");或even替换时会发生这种情况return resolve("File found");

问题:
之间的真正区别是什么为什么返回或不返回没有区别(我想是因为它是函数中的最后一条语句)。resolve()Promise.resolve()

注意:existsSync()之所以使用,是因为我希望进程在实际读取文件之前一直处于阻塞状态,因为如果不读取文件,则无事可做!我知道这里可能不需要诺言,但我仍然使用诺言,因为这就是我要学习的内容。

谢谢!

编辑:另一个问题-什么实际上应该被拒绝和解决?我的意思是,在上面的代码中,我传递new Error(...)reject()一个字符串并传递resolve()-可以吗?

一定的表现

Promise.resolve将表达式包装在Promise中。因此,Promise.resolve("File found");'File found'包裹在一个承诺,立即解决。

查看包装好的Promise在此代码中的位置-您将其返回给new Promise构造函数的调用者但是Promise构造函数完全忽略返回值(如果有)。这有点像在迭代时返回某些内容forEach-它只是被忽略了。

为了解析通过Promise构造函数构造的Promise,必须调用提供给回调的第一个参数(通常命名为resolve,但可以命名为任意名称)。

还要注意,根本不需要将拒绝包装起来new Error-如果您只有一条字符串消息要发送给使用者,那么只用一个字符串拒绝就可以了。

function readFile(path) {
    return new Promise(function(resolve, reject){
        if(!fs.existsSync(path))
            reject("data.json file does not exist");
        else {
            console.log("File is actually found!");
            resolve("File found");
        }
    })
}

等效于:

function readFile(path) {
    return new Promise((fnToCallToResolveConstructedPromise, fnToCallToRejectConstructedPromise) => {
        if(!fs.existsSync(path))
            fnToCallToRejectConstructedPromise("data.json file does not exist");
        else {
            console.log("File is actually found!");
            fnToCallToResolveConstructedPromise("File found");
        }
    })
}

可以在一个错误的对象包装它,如果它从字符串描述错误提供有用的信息给你,放在一边,但除此之外,最好忽略它,只需拨打reject一个字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回新的Promise和Promise.resolve之间的区别

Promise((resolve,reject)=> {})和Promise(resolve => {})有什么区别?

从函数返回值和返回Promise.resolve()之间的区别

Q.fcall和(Q.defer + Q.resolve + Q.promise)/ Q库之间的区别

Promise,Promise / A和Promise / A +之间的区别

Promise.resolve和新Promise(resolve)是否可互换

Promise.resolve(thenable)和新Promise(thenable.then)有什么区别?

defer()。promise和Promise之间的区别

Promise.resolve与新Promise(resolve)

Promise.resolve().then( vs Promise.resolve(

在不使用Promise.all和Promise.resolve的情况下在JS中的Promise之间传递中间数据

将Promise与resolve()和then()方法的使用混淆

Promise.resolve与数组

Promise.resolve与解决

Observable和Promise.all之间的区别

promise.then()或.then()之间的区别

为什么resolve(“。/ .. / ....”)和resolve(“ foo”)之间有区别

Promise.resolve与Vanilla JS中的新Promise(resolve)

无参数的Promise.resolve

Promise.resolve-意外结果

Promise执行器中的`resolve`和`reject`函数

Promise 和 RxJS 的区别

然后捕获和一个捕获在promise之间的区别

Promise.all和串行运行Promises之间的区别?

Promise 和 non-Promise 之间的条件

ES6-Promise.resolve中的Promise.all

Promise.resolve(promise)的用例是什么?

q.js:resolve()和complement()之间的区别

JS中Promise.all()和Promise.allSettled()之间的区别?