node新手,可能对Promise的理解出现偏差,希望得到过路大神的帮助
发布于 1 年前 作者 ziwei3749 1642 次浏览 来自 问答

屏幕快照 2017-03-15 下午8.02.46.png

问题是: 上面例子中的value参数,结果上看是“done”

可是我不理解这个参数是由什么决定了,或者说具体是从哪里来的。根据阮一峰老师的的书,有一个如下的一个说明。

C3FFC11C-F916-4BDA-A0D1-3FBA255E387F.png

我肯定不清楚resolve函数内部的东西了。我觉得模糊的地方在于,上面说异步操作成功时调用resolve函数,它会将异步操作的结果,作为参数传递出去。 在上面的例子中,为什么异步操作的结果就是 “done”呢?

我理解上面的异步操作指的是: setTimeout函数 异步操作的结果指的是: setTimeout函数的return的值 但是我这个理解肯定不对…

真诚的希望得到大神解答,十分感谢

5 回复

resolve 就是 then 里面那个函数。

function timeOut(ms) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(1);
        }, ms)
    })
}
timeOut(1000)
.then(function (data) { //data就是上面传递下来的1
    console.log(data); //1
    //如果还需要继续then 需要继续返回一个promise对象
    return timeOut(1000);
})
.then(function (data) {
    console.log(data); //1
})
.catch(function (err) {
    throw err;
});

谢谢两位,我理解有误。resolve其实就做了两个事情,将promsie对象的状态从pedding修改成resolved。然后被resolve()参数,传递给then()里面的那个回调函数

这个例子写的真恶心. setTimeout(function, milliseconds, param1, param2, …) 这个是setTimeout的函数签名, 但通过param1, param2传参其实用的很少. setTimeout(()=>resolve(“done”),ms) 这样一看不就特别好理解了?

回到顶部