Py学习  »  Redis

为什么redis.getAsync在nodejs中与async/await一起使用时返回一个挂起的承诺?[副本]

Timothy Vogel • 5 年前 • 1802 次点击  

我读到了 async 关键字隐式返回承诺:

async function getVal(){
 return await doSomethingAync();
}

var ret = getVal();
console.log(ret);

但这不是连贯的…假设 doSomethingAsync() 返回一个promise,await关键字将从promise返回值,而不是promise itsef,然后返回my getVal函数 应该 返回那个值,而不是一个隐含的承诺。

那么到底是什么情况?async关键字标记的函数是否隐式返回承诺,或者我们是否控制它们返回的内容?

也许如果我们不明确地返回某个东西,那么他们就隐式地返回一个承诺。。。?

更清楚地说,上面和

function doSomethingAync(charlie) {
    return new Promise(function (resolve) {
        setTimeout(function () {
            resolve(charlie || 'yikes');
        }, 100);
    })
}

async function getVal(){
   var val = await doSomethingAync();  // val is not a promise
   console.log(val); // logs 'yikes' or whatever
   return val;  // but this returns a promise
}

var ret = getVal();
console.log(ret);  //logs a promise

在我的概要中,这种行为确实与传统的返回语句不一致。当您显式地从 异步 函数,它将强制将其包装在一个承诺中。 我没有什么大问题,但它确实违背了正常的JS。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49717
 
1802 次点击  
文章 [ 4 ]  |  最新文章 5 年前