Angular 2.0使用new Promise()时出现错误TypeError:promise_1.Promise不是一个函数。

4
在使用 Angular 2.0 中的新 Promise 时出现错误:
TypeError: promise_1.Promise 不是一个函数。
 var promise = new Promise(function (resolve, reject) {

        this.buildCSV();
           .then(accesstoken => {
           this.doClick();
       })
    });

你在哪里使用 promise,因为显然你使用它是错误的? - Simon H
1
代码无法运行。您需要查看此链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise - gmuraleekrishna
3
不确定为什么你声称出现错误,但那是无效的JS代码...第4行的.then至少应该会产生语法错误...而且在你的代码中根本没有解决或拒绝创建的Promise。 - Jaromanda X
Promise 不是 Angular 的东西,它是浏览器的东西。不要引入它。 - Eric Martinez
只是说,避免使用Promise构造函数反模式 - Bergi
显示剩余2条评论
1个回答

1
你应该尝试这样做:
var promise = new Promise((resolve, reject) => {          
    this.buildCSV();
});

promise.then(accesstoken => {
    this.doClick();
});

then方法应该在Promise的初始化回调函数中使用。

此外,如果您想在回调函数中使用this关键字,请不要忘记使用箭头函数。

我没有看到您调用resolve/reject函数的地方。注册的回调函数将不会被调用...您尝试实现什么?

关于您的错误,如果浏览器不支持Promise(大多数情况下都存在此对象),您可以尝试导入它:

<script src="../node_modules/es6-shim/es6-shim.js"></script>
<script src="../node_modules/es6-promise/es6-promise.js"></script>

在所有情况下,Promise对象可以直接使用,无需任何导入... 在您的情况下,前缀promise_1有点奇怪,并且会让我认为您试图从某个地方导入它。
更多详细信息,请参见此问题:

1
.then 回调永远不会被调用,因为 resolvereject 没有被调用。如果 this.buildCSV() 返回一个 Promise,则根本不需要 new Promise - t.niese
我已经使用过那个了,但仍然出现错误 TypeError: promise_1.Promise 不是一个函数。 - Nikhil Tambave
同意!我不清楚使用案例是什么;-)请看我的回答的最后一部分... - Thierry Templier
也许你的浏览器不支持原生的ES6 Promise。你尝试过引入es6-promise.js文件吗? - Thierry Templier
buildCSV() 包含 API 调用,因此 Promise 会等待获取结果,成功获取结果后执行 doClick()。 - Nikhil Tambave
你如何知道 buildCsv 方法中的处理何时结束?它是异步处理吗? - Thierry Templier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接