0
我在使用browserified bluebird時遇到了問題,問題與promisify函數有關。bluebird promisify issue when browserified
代碼:
cat index.js
var Promise = require ('bluebird');
function dosomething (cb) {
cb(null,"I've done something");
}
Promise.promisify(dosomething)()
.then(function(result){
console.log(result);
})
錯誤:
node bundle.js
/tmp/gulp-test/bundle.js:3880
return makeNodePromisified(callback, receiver, undefined,
^TypeError: undefined is not a function
at promisify (/tmp/gulp-test/bundle.js:3880:12)
at Function.Promise.promisify (/tmp/gulp-test/bundle.js:3894:15)
at Object.bluebird (/tmp/gulp-test/bundle.js:28:9)
at s (/tmp/gulp-test/bundle.js:1:316)
at e (/tmp/gulp-test/bundle.js:1:487)
at Object.<anonymous> (/tmp/gulp-test/bundle.js:1:505)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
gulpfile:
cat gulpfile.js
var browserify = require('browserify');
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
gulp.task('default', function() {
return browserify('./index.js')
.bundle()
.pipe(source('bundle.js'))
.pipe(gulp.dest('./'));
});
個依賴關係:
"dependencies": {
"aws-sdk": "^2.3.4",
"bluebird": "^3.3.5",
"browserify": "^13.0.0",
"gulp": "^3.9.1",
"gulp-uglify": "^1.5.1",
"notp": "^2.0.3",
"thirty-two": "^1.0.1",
"underscore": "^1.8.3",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0"
}
如果我創建一個承諾手動正常工作:
var Promise = require ('bluebird');
function dosomething (cb) {
cb(null,"I've done something");
}
// manually promisified works fine
function Promisified() {
return new Promise(function(resolve,reject){
dosomething(function(error,result){
if(error){
return reject(error);
}
return resolve(result);
})
})
}
Promisified()
.then(function(result){
console.log(result);
})
我使用的NodeJS 0.12.04而且最新版本(4.4.3)
任何想法?
你已經指出我正確的方向+1,但它並沒有解決我的問題。我會接受你的回答,如果你提到''--node'選項browserify哪wroked爲我。沒有直接工作,因爲該選項沒有暴露,但我找到了正確的參數:https://github.com/substack/node-browserify/issues/1472#issuecomment-212823393 – Tiago
@Tiago問題是你試圖運行一個爲服務器上的瀏覽器優化的腳本。這在服務器上不起作用:當「browserify」運行時,他會使用預編譯的「bluebird」瀏覽器版本 - https://github.com/petkaantonov/bluebird/blob/master/package.json#L70和https:/ /github.com/defunctzombie/node-browser-resolve –
我明白了,但是browserify也有一個選項可以優化節點,那就是解決了我的問題(如果沒有你的幫助,我無法做到這一點。 !)。我不打算在瀏覽器中運行我的代碼,但將它與browserify捆綁在一起可以輕鬆地在AWS lambda上部署。如果你只是改變你的答案,指向'--node'選項browserify我會接受它:) – Tiago