错误的promise

bsnry 2017-10-18 08:36:08
var file = './1.txt';
function asyncFunction() {
return new Promise(function (resolve, reject) {
fs.readFile(
file, function (err, text) {
if (err) {
console.log(err);
reject("spwan some errors when read " + file);
}else{
resolve(text);
}
});
})
}

asyncFunction().then(function (text){
console.log("text:" + text);
}
).catch(function (error) {
console.log("===error==="); //为什么总是执行者一行????
});
...全文
449 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2017-10-20
  • 打赏
  • 举报
回复
那可能node的实现有问题吧 按规则是promise内的错误可以被catch捕获的 那你就try catch吧 没办法了
bsnry 2017-10-20
  • 打赏
  • 举报
回复
引用 8 楼 zzgzzg00 的回复:
.then(function(){return new Promise(...)}).then() 第二个then的执行效果由第一个then里的return的那个promise决定
var file = './1.txt';
var fs = require('fs');

function asyncFunction() {
  return new Promise(function (resolve, reject) {
    fs.readFile(
      file, function (err, text) {
        if (err) {
          console.log(err);
          reject("spwan some errors when read " + file);
        }else{
          console.log("======33333");
          //这里的json文件是错误格式,抛出异常,但是没有进入catch中
		  obj = JSON.parse(text);
		  console.log("=====44444");
		  resolve(text);
        }
      });
  })
}

asyncFunction().catch(function (error){
	console.log("1123");
}).then(function (text){
  console.log("enter asyncFunction");
 
}).catch(function (error) {
	console.log("===error===");
});
asyncFunction().catch(function (error){ console.log("1123"); }).then 当文件存在的时候,json文件是个非法格式的内容, JSON.parse抛出异常,但是并不会进入catch, 你可以试试。 看到没有,我在then的前面插入了一个catch,就是为了捕捉那个JSON.parse,结果捕捉不到。
似梦飞花 2017-10-19
  • 打赏
  • 举报
回复

(new Promise(function(resolve,reject){
            JSON.parse('{a:1');
        }))
        .catch(function(e){
            console.log(1);
        })
        .then(function(){
            JSON.parse('{a:1');
        })
        .catch(function(){
            console.log(2);
        })
chrome下1 2都会打出
似梦飞花 2017-10-19
  • 打赏
  • 举报
回复
1 可以 then里return new Promise之后的then的状态由这个抛出的promise决定 2.原则上是可以捕获的 可能node实现不一样?可以try catch一下 抛出个Promise.reject() 之后就可以catch了
bsnry 2017-10-19
  • 打赏
  • 举报
回复
引用 2 楼 zzgzzg00 的回复:
err不是走了个log吗?打印出来了吗?打印下catch的参数信息啊
引用 1 楼 showbo 的回复:
fs变量哪里定义的?fs是什么对象?promise内部代码错误也是执行catch语句的,肯定是你的fs代码报错了,或者fs就没定义 Web开发学习资料推荐 XDomainRequest,IE8+跨域请求对象 XMLHttpRequest加载视频并播放
见3楼,谢谢, 解答后,马上发分数
bsnry 2017-10-19
  • 打赏
  • 举报
回复
var fs = require('fs');

var file = './1.txt';

function asyncFunction() {
  return new Promise(function (resolve, reject) {
    fs.readFile(
      file, function (err, text) {
        if (!err) {
          console.log("===123===");

		  console.log("====456===");
		  JSON.parse(text); 
          resolve(text);
        }else{
          reject(text);
        }
      });
  })
}

asyncFunction().then(function (text){
  console.log("text:" + text);
}
).catch(function (error) {
	console.log("===enter catch===");
	console.log(error);
});

两个问题: 问题1: 最后一个then ,也就是 then(function (text){ console.log("text:" + text); } 里能否返回return new Promise(function (resolve, reject) {} ?? 问题2: 如果函数asyncFunction在解析JSON的时候,抛出异常来(比如json是非法格式),我做过实验,异常不会进入 catch中, 请问,我是否应该在asyncFunction 这个里对JSON.parse(text); 进行try ...catch...操作?
似梦飞花 2017-10-19
  • 打赏
  • 举报
回复
err不是走了个log吗?打印出来了吗?打印下catch的参数信息啊
Go 旅城通票 2017-10-19
  • 打赏
  • 举报
回复
fs变量哪里定义的?fs是什么对象?promise内部代码错误也是执行catch语句的,肯定是你的fs代码报错了,或者fs就没定义

Web开发学习资料推荐
XDomainRequest,IE8+跨域请求对象
XMLHttpRequest加载视频并播放
似梦飞花 2017-10-19
  • 打赏
  • 举报
回复
.then(function(){return new Promise(...)}).then() 第二个then的执行效果由第一个then里的return的那个promise决定
bsnry 2017-10-19
  • 打赏
  • 举报
回复
引用 5 楼 zzgzzg00 的回复:
1 可以 then里return new Promise之后的then的状态由这个抛出的promise决定 2.原则上是可以捕获的 可能node实现不一样?可以try catch一下 抛出个Promise.reject() 之后就可以catch了
看来 好几遍,没看懂 第一句话, 可以 then里return new Promise之后的then的状态由这个抛出的promise决定 我理解为: (1) 最后一个then,是可以return new Promise; (2) 该Promise的状态谁来决定? 我是理解为, 由该promise自身代码决定,举个例子, 最后这个promise的函数中, function (resolve, reject) { } 由自己代码来决定resolve, reject, 不过由于是最后一个Promise, 所以它resolve是没有意义的, 应该说,最后一个Promise只可能,只可能调用reject。 不知道我这么理解对否?

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧