之前貌似很少写过promise, async, await相关的内容。我大概知道await使用的时候,函数必须外边有async. 我今天写函数的时候,写了一个函数,然后调用的时候,发现返回的是 promise<pending> 的状态。但是我在调用的函数里面打log, 是能打出来结果的,搜了很长时间才找到答案。最后也解决了。这里记录一下:

var rs={score:0};
 var getAs= async function() {
    const doc = await client.zscore('myzset', 'one', function (err, res) {
            console.log("score-1-:"+res);
            rs.score=res
            return res;
        });
    return doc;
getAs().then(function (result) {
        console.log("then:"+result);
});
console.log("#############"+rs.score);

上面这个例子,是想使用redis的zscore来获取数据。我们不关心函数是干嘛的,这个函数用async, await写的。然后下面的函数getAs()进行了调用,还通过then方法,来获取result. 但是这里获取失败了。哪里出问题了?首先上面的async, await返回的是一个promise对象。所以它肯定返回不了想要的result. 只能是在resolve之后把结果给返回来。即使用了then方法,拿到的也是promise. 所以对上面代码做一下修改。

const rs = { score: 0 };
const getAs = async () => {
    const doc = await new Promise((resolve) => {
        client.zscore('myzset', 'one', (err, res) => {
            console.log(`score-1-:${res}`);
            rs.score = res;
            return resolve(res);
        });
    });
    return doc;
getAs()
    .then((result) => {
        console.log(`then:${result}`);
    });
console.log(`#############${rs.score}`);

下面的代码只是在getAs这个函数外面包了一层。这样返回的结果就是resolve之后的结果了。
await 返回的值是promise返回的值。而promise返回的值是需要设定的,我们要的是resolve的,我们就返回resolve的。

https://segmentfault.com/q/1010000010424097

之前貌似很少写过promise, async, await相关的内容。我大概知道await使用的时候,函数必须外边有async. 我今天写函数的时候,写了一个函数,然后调用的时候,发现返回的是promise&lt;pending&gt;的状态。但是我在调用的函数里面打log, 是能打出来结果的,搜了很长时间才找到答案。最后也解决了。这里记录一下:var rs={score:0}; var g... let uploadData={ type :formData.award_type, count :formData.award_send_info_11 || formData.award_send_info_23
promise 基本用法 Promise 对象是一个构造函数,用来生成 Promise 实例。Promise 构造函数接受一个函数作为参数,该函数的两个参数分别是 resolve 和 reject。 resolve 函数的作用是,在异步操作成功时调用(Promise 对象的状态从 pending 变为 fulfilled),并将异步操作的结果,作为参数传递出去。 reject 函数的作用是,在异步操作失败时调用(Promise对象的状态从 pending 变为 rejected),并将异步操作报出的错误,作为参数传递出去。 const funPromise = function(optio
JavaScript是一门典型的异步编程脚本语言,在编程过程中会大量的出现异步代码的编写,在JS的整个发展历程中对异步编程的处理方式经历了很多个时代,最典型也是现今使用最广泛的时代就是Promise对象处理异步编程。那么什么是Promise对象呢? Promise是ES6版本提案中实现的异步处理方式,对象代表了未来将要发生的事件,用来传递异步操作的消息。 为什么使用Promise对象 举个栗子: 在过去的编程中JavaScript的主要异步处理方式是采用回调函数的方式来进行处理的所以如果想要
Promise 执行机制——共有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败) & 宏任务(主线) 微任务(穿插) 深入探讨 Promise 之前,有个概念先交代一下,有助于对后文进行了解。 通常,我们把消息队列中的任务成为宏任务,而每一个宏任务中都包含了一个微任务队列。等到当前宏任务中的主要任务执行完成了以后,渲染引擎其实并不着急执行下一个宏任务,而是先去执行当前宏任务中的微任务。 只是引入了概念,我想大家会跟我有同样的疑惑,平常大部分的开发中
这里只讲promise的如何使用,适用于什么情况下。不手撕源码,想看手撕源码请移步B站搜索promise。 假设我们现在有一串代码,用来判断现在输入的字符换是不是“abcd”。这段代码比较傻,只会一个字符换一个字符串的判断。 function check(str){ if (str[0]=='a'){ if (str[1]=='b'){ if (str[2]=='c'){