首页 > 其他 > 详细

Promise面试题

时间:2019-10-25 11:32:54      阅读:89      评论:0      收藏:0      [点我收藏+]
const promise = new Promise((resolve, reject) => {
    console.log(1);
    resolve();
    console.log(2);
})
promise.then(() => {
    console.log(3);
})
console.log(4);

Promise一旦创建立即执行

所以1,2输出

Promise.then 在所有的代码执行完毕后执行

所以3最后

所以是1243

const promise = new Promise((resolve, reject) => {
    resolve(‘success1‘);
    reject(‘error‘);
    resolve(‘success2‘);
});
promise.then((res) => {
    console.log(‘then:‘, res);
}).catch((err) => {
    console.log(‘catch:‘, err);
})

Promise一旦创建立即执行

resolve函数是当Promise对象的状态从“未完成”变为“成功”(即从pending变为resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数将Promise对象的状态从“未完成”变为“失败”(即从pending变为rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

Promise只能resolve一次,剩下的调用都会被忽略。而一旦状态改变,就不会有再变,所以代码中的reject(‘error‘);不会有作用。
 
所以第二次resolve(‘success‘);也不会有作用。
答案:then:success1
Promise.resolve(1)
  .then(2)
  .then(Promise.resolve(3))
  .then(console.log)
Promise.resolve方法的参数,如果是一个原始值,或者是一个不具有then方法的对象
原始值即一些代表原始数据类型的值,也叫基本数据类型,Number,String,Boolean,Null,Undefined这些基本数据类型都是原始值。
则Promise.resolve方法返回一个新的Promise对象,状态为resolved。Promise.resolve方法的参数,会同时传给回调函数。
参数为1,number类型所以为原始值。所以1传给回调函数。
then方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面。
2不是函数,所以前一个promise的结果是传给回调函数的1,往下传递。
答案 1

Promise面试题

原文:https://www.cnblogs.com/carry-2017/p/11736291.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!