问题是: 上面例子中的value参数,结果上看是“done”
可是我不理解这个参数是由什么决定了,或者说具体是从哪里来的。根据阮一峰老师的的书,有一个如下的一个说明。
我肯定不清楚resolve函数内部的东西了。我觉得模糊的地方在于,上面说异步操作成功时调用resolve函数,它会将异步操作的结果,作为参数传递出去。 在上面的例子中,为什么异步操作的结果就是 “done”呢?
我理解上面的异步操作指的是: setTimeout函数 异步操作的结果指的是: setTimeout函数的return的值 但是我这个理解肯定不对…
真诚的希望得到大神解答,十分感谢
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) 这样一看不就特别好理解了?
[实际小项目练手]https://github.com/wang-weifeng/weather-api-promise-async-await [promise-async-await]https://github.com/wang-weifeng/promise-async-await