2015-07-21 40 views
2

如何在jsfiddle上使用q promise和requirejs?

requirejs.config({ 
    paths: { 
    'q' : '//cdnjs.cloudflare.com/ajax/libs/q.js/2.0.3/q.min' 
}}); 

require(['q'], function(Q) { 
    console.log("In Loaded callback"); 
    console.log("Q: %o", Q); 
    return {}; 
}); 

失败:

Module name "weak-map" has not been loaded yet for context: _. Use require([]) 
http://requirejs.org/docs/errors.html#notloaded 
File: require.min.js, Line: 1, Column: 1948 

JSFiddle

然而,这工作得很好:

requirejs.config({ 
    paths: { 
    'q' : '//cdnjs.cloudflare.com/ajax/libs/q.js/1.4.1/q.min' 
}}); 
+0

很显然,Q 2.x依赖'WeakMap's,这在大多数浏览器本机上都不可用。 – Bergi

回答

2

我查了一下,发现是Q V2现在是实验。在源代码中,我们可以看到,它有以下库

var WeakMap = require("weak-map"); 
var iterate = require("pop-iterate"); 
var asap = require("asap"); 

而这种类型的需要/模块导入节点/ browserify依赖。它不会支持require.js。根据文档: -

这是Q版本2,目前是实验性的。如果您从npm安装最新的Q,您将获得版本1发行版的最新版本。

因此,除非我们在nodejs/browserify中使用它,否则最好在此时刻坚持v1。